Code review 1 - service

konradin23 avatar
konradin23
java
02/18/2026 5:33 PM
2.5 KB
15
Indexable
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

@Service
public class OrderService {

    private OrderRepository orderRepository;
    private AuditService auditService;
    private DiscoutCalculator discoutCalculator;

    public void setOrderRepository(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    public void setAuditService(AuditService auditService) {
        this.auditService = auditService;
    }

    public void setDiscountCalculator(DiscoutCalculator discoutCalculator) {
        this.discoutCalculator = discoutCalculator;
    }

    public void processOrder(String orderId) {
        try {
            Order order = findOrder(orderId);

            applyDiscount(order);

            saveOrder(order);

            auditService.audit("Order processed: " + orderId);
        } catch (Exception e) {
            throw new RuntimeException("Failed to process order: " + orderId);
        }
    }

    public Order findOrder(String orderId) {
        try {
            return orderRepository.findById(orderId)
                    .orElseThrow(() -> new IllegalArgumentException("Order not found"));
        } catch (Exception e) {
            return null;
        }
    }

    @Transactional
    public void saveOrder(Order order) {
        try {
            orderRepository.save(order);
        } catch (Exception e) {
            System.out.println("Error while saving order: " + e.getMessage());
            throw new IllegalStateException("Save failed");
        }
    }

    private void applyDiscount(Order order) {
        if(order.getUser().getType().equals("PREMIUM_USER")) {
            double discout = discoutCalculator.calculateDiscout(order);
            order.setDiscount(discout);
        }
    }
}
Editor is loading...
Leave a Comment