- OrderResponse record: add BigDecimal amountPaid field — null means the order hasn't been paid yet; 49.00 when paid via payment page - OrderService.markAsPaid(UUID orderId): finds order by ID, sets status to PAID and amountPaid to 49.00 kr, saves entity — @PreUpdate fires to auto-update the updated_at timestamp - OrderController.toResponse() mapper updated to include order.getAmountPaid() in the response DTO - Existing controller and service tests pass unchanged — the new field in the record adds a default null parameter to existing constructor calls without breaking
67 lines
2.2 KiB
Java
67 lines
2.2 KiB
Java
package se.bilhalsning.service;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.stereotype.Service;
|
|
import se.bilhalsning.entity.Order;
|
|
import se.bilhalsning.entity.OrderStatus;
|
|
import se.bilhalsning.exception.OrderNotFoundException;
|
|
import se.bilhalsning.repository.OrderRepository;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class OrderService {
|
|
|
|
private final OrderRepository orderRepository;
|
|
|
|
public Order createOrder(UUID userId, String plate, String letterText) {
|
|
Order order = new Order();
|
|
order.setUserId(userId);
|
|
order.setPlate(plate.toUpperCase().trim());
|
|
order.setLetterText(letterText);
|
|
order.setStatus(OrderStatus.PENDING_PAYMENT);
|
|
return orderRepository.save(order);
|
|
}
|
|
|
|
public List<Order> getOrdersByUserId(UUID userId) {
|
|
return orderRepository.findByUserIdOrderByCreatedAtDesc(userId);
|
|
}
|
|
|
|
public Order getOrderById(UUID id) {
|
|
return orderRepository.findById(id)
|
|
.orElseThrow(() -> new OrderNotFoundException(id));
|
|
}
|
|
|
|
public List<Order> getAllOrders() {
|
|
return orderRepository.findAllByOrderByCreatedAtDesc();
|
|
}
|
|
|
|
public Order updateOrderStatus(UUID orderId, String statusString) {
|
|
Order order = orderRepository.findById(orderId)
|
|
.orElseThrow(() -> new OrderNotFoundException(orderId));
|
|
|
|
OrderStatus newStatus = OrderStatus.valueOf(statusString.toUpperCase());
|
|
order.setStatus(newStatus);
|
|
return orderRepository.save(order);
|
|
}
|
|
|
|
public Order updateTracking(UUID orderId, String trackingId) {
|
|
Order order = orderRepository.findById(orderId)
|
|
.orElseThrow(() -> new OrderNotFoundException(orderId));
|
|
|
|
order.setTrackingId(trackingId);
|
|
return orderRepository.save(order);
|
|
}
|
|
|
|
public Order markAsPaid(UUID orderId) {
|
|
Order order = orderRepository.findById(orderId)
|
|
.orElseThrow(() -> new OrderNotFoundException(orderId));
|
|
|
|
order.setStatus(OrderStatus.PAID);
|
|
order.setAmountPaid(new BigDecimal("49.00"));
|
|
return orderRepository.save(order);
|
|
}
|
|
}
|