From 3c633af9525b64dde5d83e75e49d8e0bf65609fc Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Fri, 24 Oct 2025 03:30:53 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CustomerOrderService.java | 28 +++++++++++ .../controller/CustomerOrderController.java | 28 +++++++++++ .../response/OrderDetailStatusResponse.java | 46 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java create mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java create mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java new file mode 100644 index 00000000..672b906d --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -0,0 +1,28 @@ +package com.irum.come2us.domain.order.application.service; + +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; +import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import com.irum.come2us.global.presentation.advice.exception.CommonException; +import com.irum.come2us.global.presentation.advice.exception.errorcode.OrderErrorCode; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Service +@Slf4j +@RequiredArgsConstructor +public class CustomerOrderService { + private final OrderDetailRepository orderDetailRepository; + + public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId){ + OrderDetail orderDetail = orderDetailRepository.findByOrderDetailId(orderDetailId) + .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_DETAIL_NOT_FOUND)); + + return OrderDetailStatusResponse.from(orderDetail); + } +} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java new file mode 100644 index 00000000..68347553 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -0,0 +1,28 @@ +package com.irum.come2us.domain.order.presentation.controller; + +import java.util.UUID; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.irum.come2us.domain.order.application.service.CustomerOrderService; +import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@RestController +@RequestMapping("orders/customer") +public class CustomerOrderController { + private final CustomerOrderService customerOrderService; + + /**주문 상태 조회*/ + @GetMapping("/order-detail/{orderDetailId}/delivery-status") + public OrderDetailStatusResponse orderDetailStatusGet( + @PathVariable(name="orderDetailId") UUID orderDetailId + ){ + return customerOrderService.getOrderDetailStatus(orderDetailId); + } +} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java new file mode 100644 index 00000000..899fa1b6 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java @@ -0,0 +1,46 @@ +package com.irum.come2us.domain.order.presentation.dto.response; + +import com.irum.come2us.domain.deliveryaddress.domain.entity.Address; +import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; + +public record OrderDetailStatusResponse( + String productName, + int quantity, + String optionName, + AddressResponse address, + String recipientName, + OrderStatus orderStatus, + Integer trackingNumber, + String deliveryRequest +) { + public record AddressResponse( + String postalCode, + String city, + String sigungu, + String roadname, + String addressDetail + ){ + public static AddressResponse from(Address address){ + return new AddressResponse( + address.getPostalCode(), + address.getCity(), + address.getSigungu(), + address.getRoadName(), + address.getAddressDetail() + ); + } + } + public static OrderDetailStatusResponse from(OrderDetail orderDetail){ + return new OrderDetailStatusResponse( + orderDetail.getProductName(), + orderDetail.getQuantity(), + orderDetail.getOptionName(), + AddressResponse.from(orderDetail.getOrder().getDeliveryAddress().getAddress()), + orderDetail.getOrder().getDeliveryAddress().getRecipientName(), + orderDetail.getOrderStatusIndi(), + orderDetail.getTrackingNumber(), + orderDetail.getOrder().getDeliveryRequest() + ); + } +} From e89b137ea687f19285785114faa78454c6dcb430 Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:16:47 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feature=20#182=20:=20=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20=EC=83=81=EC=84=B8=20=EB=82=B4=EC=97=AD=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CustomerOrderMapper.java | 57 +++++++++++++++++++ .../order/application/mapper/OrderMapper.java | 2 - .../service/CustomerOrderService.java | 28 +++++++++ .../controller/CustomerOrderController.java | 12 ++++ .../order/presentation/dto/response/.gitkeep | 0 .../dto/response/AddressResponse.java | 23 ++++++++ .../dto/response/OrderDetailResponse.java | 47 +++++++++++++++ .../response/OrderDetailStatusResponse.java | 17 ------ .../domain/payment/domain/entity/Payment.java | 1 + .../domain/refund/domain/entity/Refund.java | 3 + .../domain/repository/RefundRepository.java | 15 +++++ 11 files changed, 186 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java delete mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/dto/response/.gitkeep create mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java create mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java create mode 100644 src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java new file mode 100644 index 00000000..2bbf7bca --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java @@ -0,0 +1,57 @@ +package com.irum.come2us.domain.order.application.mapper; + +import java.time.LocalDate; +import java.util.List; + +import org.springframework.stereotype.Component; + +import com.irum.come2us.domain.order.domain.entity.Order; +import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; +import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; +import com.irum.come2us.domain.refund.domain.entity.Refund; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; + +@Component +public class CustomerOrderMapper { + + public static OrderDetailResponse toOrderDetailResponse(Order order, List orderDetailList, Refund refund){ + List pList = orderDetailList.stream() + .map(CustomerOrderMapper::toProductResponse).toList(); + + RefundStatus refundStatus; + if (refund == null){ + refundStatus = null; + } else { + refundStatus = refund.getRefundStatus(); + } + + return OrderDetailResponse.builder() + .orderAt(order.getCreatedAt()) + .paymentStatus(order.getPayment().getPaymentStatus()) + .paymentMethod(order.getPayment().getPaymentMethod()) + .deliveryFee(order.getDeliveryFee()) + .discountAmount(order.getPayment().getTotalDiscountAmount()) + .totalProductPrice(order.getTotalPrice()) + .totalPaymentPrice(order.getPayment().getAmount()) + .orderStatusAll(order.getOrderStatusAll()) + .refundStatus(refundStatus) + .deliveryRequest(order.getDeliveryRequest()) + .address(AddressResponse.from(order.getDeliveryAddress().getAddress())) + .recipientContact(order.getDeliveryAddress().getRecipientContact()) + .recipientName(order.getDeliveryAddress().getRecipientName()) + .productResponseList(pList) + .build(); + } + + private static OrderDetailResponse.ProductResponse toProductResponse(OrderDetail orderDetail){ + + return OrderDetailResponse.ProductResponse.builder() + .receivedDate(orderDetail.getArrivedDate().toLocalDate()) + .productName(orderDetail.getProductName()) + .optionTitle(orderDetail.getOptionName()) + .price(orderDetail.getPrice()) + .quantity(orderDetail.getQuantity()) + .build(); + } +} diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java index 7576ba7a..3b96098a 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java @@ -8,7 +8,6 @@ @Component public class OrderMapper { - /** Repository DTO -> Response DTO로 변환 */ public OwnerOrderListResponse.ProductSummary toProductSummary(OrderDetailRow detail) { return new OwnerOrderListResponse.ProductSummary( detail.orderDetailId(), @@ -18,7 +17,6 @@ public OwnerOrderListResponse.ProductSummary toProductSummary(OrderDetailRow det detail.optionTitle()); } - /** Repository DTO -> Response DTO로 변환 */ public OwnerOrderListResponse.OrderSummary toOrderSummary( OrderSummaryRow header, List products) { return new OwnerOrderListResponse.OrderSummary( diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 672b906d..37909f47 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -1,12 +1,21 @@ package com.irum.come2us.domain.order.application.service; +import java.util.List; import java.util.UUID; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.irum.come2us.domain.order.application.mapper.CustomerOrderMapper; +import com.irum.come2us.domain.order.application.mapper.OrderMapper; +import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; +import com.irum.come2us.domain.order.domain.repository.OrderRepository; +import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import com.irum.come2us.domain.refund.domain.entity.Refund; +import com.irum.come2us.domain.refund.domain.repository.RefundRepository; import com.irum.come2us.global.presentation.advice.exception.CommonException; import com.irum.come2us.global.presentation.advice.exception.errorcode.OrderErrorCode; @@ -16,13 +25,32 @@ @Service @Slf4j @RequiredArgsConstructor +@Transactional public class CustomerOrderService { private final OrderDetailRepository orderDetailRepository; + private final OrderRepository orderRepository; + private final RefundRepository refundRepository; + @Transactional(readOnly = true) public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId){ OrderDetail orderDetail = orderDetailRepository.findByOrderDetailId(orderDetailId) .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_DETAIL_NOT_FOUND)); return OrderDetailStatusResponse.from(orderDetail); } + + + @Transactional(readOnly = true) + public OrderDetailResponse getOrderDetail(UUID orderId){ + Order order = orderRepository.findByOrderId(orderId) + .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_NOT_FOUND)); + + List orderDetailList = orderDetailRepository.findAllByOrder(order); + + Refund refund = refundRepository.findByOrder(order).orElse(null); + + return CustomerOrderMapper.toOrderDetailResponse(order, orderDetailList, refund); + + + } } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 68347553..9aafc2bc 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -8,8 +8,11 @@ import org.springframework.web.bind.annotation.RestController; import com.irum.come2us.domain.order.application.service.CustomerOrderService; +import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @@ -25,4 +28,13 @@ public OrderDetailStatusResponse orderDetailStatusGet( ){ return customerOrderService.getOrderDetailStatus(orderDetailId); } + + /**주문 상세 조회*/ + @GetMapping("/{orderId}") + public OrderDetailResponse orderDetailGet( + @PathVariable(name="orderId") UUID orderId + ) { + return customerOrderService.getOrderDetail(orderId); + } + } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/.gitkeep b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java new file mode 100644 index 00000000..02826755 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java @@ -0,0 +1,23 @@ +package com.irum.come2us.domain.order.presentation.dto.response; + +import com.irum.come2us.domain.deliveryaddress.domain.entity.Address; + + + +public record AddressResponse( + String postalCode, + String city, + String sigungu, + String roadname, + String addressDetail +) { + public static AddressResponse from(Address address) { + return new AddressResponse( + address.getPostalCode(), + address.getCity(), + address.getSigungu(), + address.getRoadName(), + address.getAddressDetail() + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java new file mode 100644 index 00000000..1de4fd46 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java @@ -0,0 +1,47 @@ +package com.irum.come2us.domain.order.presentation.dto.response; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; +import com.irum.come2us.domain.payment.domain.entity.enums.PaymentMethod; +import com.irum.come2us.domain.payment.domain.entity.enums.PaymentStatus; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; + +import lombok.Builder; + +@Builder +public record OrderDetailResponse( + LocalDateTime orderAt, + PaymentStatus paymentStatus, + PaymentMethod paymentMethod, + int deliveryFee, + int discountAmount, + int totalProductPrice, + int totalPaymentPrice, + + OrderStatus orderStatusAll, + RefundStatus refundStatus, + String deliveryRequest, + AddressResponse address, + String recipientContact, + String recipientName, + + List productResponseList +) { + + + @Builder + public record ProductResponse( + String productName, + String optionTitle, + int quantity, + int price, + LocalDate receivedDate + ){ + + } +} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java index 899fa1b6..0ae1d8dc 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java @@ -14,23 +14,6 @@ public record OrderDetailStatusResponse( Integer trackingNumber, String deliveryRequest ) { - public record AddressResponse( - String postalCode, - String city, - String sigungu, - String roadname, - String addressDetail - ){ - public static AddressResponse from(Address address){ - return new AddressResponse( - address.getPostalCode(), - address.getCity(), - address.getSigungu(), - address.getRoadName(), - address.getAddressDetail() - ); - } - } public static OrderDetailStatusResponse from(OrderDetail orderDetail){ return new OrderDetailStatusResponse( orderDetail.getProductName(), diff --git a/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java b/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java index 49d4c468..7059e380 100644 --- a/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java +++ b/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java @@ -13,6 +13,7 @@ import org.hibernate.annotations.UuidGenerator; @Builder +@Getter @AllArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE p_payment SET deleted_at = NOW() WHERE payment_id=?") @SQLRestriction("deleted_at is null") diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java index ddd52e43..aa6c1493 100644 --- a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java +++ b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java @@ -9,6 +9,8 @@ import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; +import lombok.Generated; +import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.SQLRestriction; @@ -20,6 +22,7 @@ @SQLRestriction("deleted_at is null") @NoArgsConstructor @Builder +@Getter @Table(name = "p_refund") public class Refund extends BaseEntity { @Id diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java new file mode 100644 index 00000000..6e1febd3 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java @@ -0,0 +1,15 @@ +package com.irum.come2us.domain.refund.domain.repository; + +import java.util.Optional; +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.irum.come2us.domain.order.domain.entity.Order; +import com.irum.come2us.domain.refund.domain.entity.Refund; + +@Repository +public interface RefundRepository extends JpaRepository { + Optional findByOrder(Order order); +} From dbb3e63c2f906225d5946282e0efb74ad88d473d Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:26:17 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20controller?= =?UTF-8?q?=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CustomerOrderService.java | 11 ++++++++ .../domain/repository/OrderRepository.java | 7 +++++ .../controller/CustomerOrderController.java | 7 +++++ .../dto/response/OrderListResponse.java | 28 +++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 37909f47..bcc20566 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.application.mapper.CustomerOrderMapper; import com.irum.come2us.domain.order.application.mapper.OrderMapper; import com.irum.come2us.domain.order.domain.entity.Order; @@ -14,10 +15,12 @@ import com.irum.come2us.domain.order.domain.repository.OrderRepository; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.repository.RefundRepository; import com.irum.come2us.global.presentation.advice.exception.CommonException; import com.irum.come2us.global.presentation.advice.exception.errorcode.OrderErrorCode; +import com.irum.come2us.global.util.MemberUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +33,7 @@ public class CustomerOrderService { private final OrderDetailRepository orderDetailRepository; private final OrderRepository orderRepository; private final RefundRepository refundRepository; + private final MemberUtil memberUtil; @Transactional(readOnly = true) public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId){ @@ -51,6 +55,13 @@ public OrderDetailResponse getOrderDetail(UUID orderId){ return CustomerOrderMapper.toOrderDetailResponse(order, orderDetailList, refund); + } + + @Transactional + public OrderListResponse getOrderList(){ + Member member = memberUtil.getCurrentMember(); + List orderList = orderRepository.findAllByMember(member); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java index c037eac3..6b941912 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java @@ -1,12 +1,19 @@ package com.irum.come2us.domain.order.domain.repository; +import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.domain.entity.Order; + +import java.util.List; import java.util.Optional; import java.util.UUID; + +import org.aspectj.weaver.ast.Or; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface OrderRepository extends JpaRepository { Optional findByOrderId(UUID orderId); + + List findAllByMember(Member member); } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 9aafc2bc..3a18b0f8 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -11,6 +11,7 @@ import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -37,4 +38,10 @@ public OrderDetailResponse orderDetailGet( return customerOrderService.getOrderDetail(orderId); } + /**주문 목록 조회*/ + @GetMapping("") + public OrderListResponse orderListGet(){ + return customerOrderService.getOrderList(); + } + } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java new file mode 100644 index 00000000..814f874f --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java @@ -0,0 +1,28 @@ +package com.irum.come2us.domain.order.presentation.dto.response; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; + +public record OrderListResponse ( + String nextCursor, + Boolean hasNext, + List orderList +){ + public record OrderResponse( + LocalDateTime orderAt, + List productResponseList + ){ + public record ProductResponse( + UUID orderDetailId, + String optionName, + int quantity, + OrderStatus orderStatus, + RefundStatus refundStatus, + int price + ){} + } +} From a7da29b33a1834ae2830467d6b7da27cde776d92 Mon Sep 17 00:00:00 2001 From: hyeonji91 Date: Fri, 24 Oct 2025 17:45:23 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20custom=20?= =?UTF-8?q?repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CustomerOrderService.java | 50 ++++++++++++++- .../application/service/OrderService.java | 5 +- .../domain/repository/OrderRepository.java | 2 +- .../repository/OrderRepositoryCustom.java | 14 +++++ .../repository/OrderRepositoryImpl.java | 61 +++++++++++++++++++ .../controller/CustomerOrderController.java | 15 +++-- .../dto/response/OrderListResponse.java | 1 + 7 files changed, 137 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index bcc20566..7efcae66 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -1,8 +1,14 @@ package com.irum.come2us.domain.order.application.service; +import java.time.LocalDate; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; +import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; +import com.irum.come2us.domain.order.presentation.dto.response.OwnerOrderListResponse; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,10 +64,52 @@ public OrderDetailResponse getOrderDetail(UUID orderId){ } @Transactional - public OrderListResponse getOrderList(){ + public OrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate, LocalDate endDate){ Member member = memberUtil.getCurrentMember(); List orderList = orderRepository.findAllByMember(member); + // 2. order list 검색 + var headerList = + orderRepository.fetchOrderHeaderListByMember(member, startDate, endDate, cursor, size); + + boolean hasNext = headerList.size() > size; + if (hasNext) { + headerList = headerList.subList(0, size); + } + + // 3. order detail 검색 + List orderIdList = headerList.stream().map(Order::getOrderId).toList(); + + + var orderDetailList = orderRepository.fetchOrderDetailList(orderIdList); + + // 4. orderId로 그룹핑 : productSummary 제작 + Map> detailMap = + orderDetailList.stream() + .collect( + Collectors.groupingBy( + OrderDetailRow::orderId, + Collectors.mapping( + orderMapper::toProductSummary, + Collectors.toList()))); + + // 5. orderSummary 제작 + List orderSummaryList = + headerList.stream() + .filter(order -> detailMap.containsKey(order.orderId())) + .map( + order -> + orderMapper.toOrderSummary( + order, + detailMap.getOrDefault( + order.orderId(), + List.of()) // order detail 없다면 빈 리스트 + )) + .toList(); + + // 6. next cursor계산 + UUID nextCursor = orderSummaryList.isEmpty() ? null : headerList.getLast().orderId(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java index 4f5728ec..a49a2250 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java @@ -29,7 +29,6 @@ public class OrderService { private final OrderDetailRepository orderDetailRepository; private final OrderRepository orderRepository; - private final OrderRepositoryCustom orderRepositoryCustom; private final OrderMapper orderMapper; @Transactional(readOnly = true) @@ -80,7 +79,7 @@ private OwnerOrderListResponse getOwnerOrderList( // 2. order list 검색 var headerList = - orderRepositoryCustom.fetchOrderHeaderList(storeId, orderStatus, cursor, size); + orderRepository.fetchOrderHeaderList(storeId, orderStatus, cursor, size); boolean hasNext = headerList.size() > size; if (hasNext) { @@ -89,7 +88,7 @@ private OwnerOrderListResponse getOwnerOrderList( // 3. order detail 검색 var orderIdList = headerList.stream().map(OrderSummaryRow::orderId).toList(); - var orderDetailList = orderRepositoryCustom.fetchOrderDetailList(orderIdList); + var orderDetailList = orderRepository.fetchOrderDetailList(orderIdList); // 4. orderId로 그룹핑 : productSummary 제작 Map> detailMap = diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java index 6b941912..4b6a7528 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository; @Repository -public interface OrderRepository extends JpaRepository { +public interface OrderRepository extends JpaRepository, OrderRepositoryCustom { Optional findByOrderId(UUID orderId); List findAllByMember(Member member); diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java index 8d254220..8a88eca6 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java @@ -1,9 +1,15 @@ package com.irum.come2us.domain.order.domain.repository; +import com.irum.come2us.domain.member.domain.entity.Member; +import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; +import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; + +import java.time.LocalDate; import java.util.List; +import java.util.Map; import java.util.UUID; public interface OrderRepositoryCustom { @@ -11,4 +17,12 @@ List fetchOrderHeaderList( UUID storeId, OrderStatus orderStatus, UUID cursor, int size); List fetchOrderDetailList(List orderIdList); + + + List fetchOrderHeaderListByMember( + Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size); + + Map> fetchOrderDetailListByMember( + List orderIdList + ); } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java index e61df15b..3ec7596b 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java @@ -1,15 +1,21 @@ package com.irum.come2us.domain.order.infrastructure.repository; +import com.irum.come2us.domain.member.domain.entity.Member; +import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.QOrder; import com.irum.come2us.domain.order.domain.entity.QOrderDetail; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.domain.repository.OrderRepositoryCustom; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; +import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + +import java.time.LocalDate; import java.util.List; +import java.util.Map; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -74,4 +80,59 @@ public List fetchOrderDetailList(List orderIdList) { .where(od.order.orderId.in(orderIdList)) .fetch(); } + + @Override + public List fetchOrderHeaderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { + + QOrder o = QOrder.order; + + return queryFactory + .selectFrom(o) + .where( + o.member.memberId.eq(member.getMemberId()), + ltCursor(cursor, o), + o.createdAt.after(startDate.atStartOfDay()), + o.createdAt.before(endDate.atStartOfDay()) + ) + .orderBy(o.orderId.desc()) + .limit(size+1) + .fetch(); + } + + @Override + public Map> fetchOrderDetailListByMember(List orderIdList) { + if (orderIdList.isEmpty()) { + return Map.of(); + } + QOrder o = QOrder.order; + + + return queryFactory + .from(o) + .join(o., orderDetail) + .where(order.orderId.in(orderIds)) + .transform( + GroupBy.groupBy(order.orderId).as( + Projections.constructor( + OrderListResponse.OrderResponse.class, + order.createdAt, // orderAt + GroupBy.list( + Projections.constructor( + OrderListResponse.OrderResponse.ProductResponse.class, + orderDetail.orderDetailId, + orderDetail.optionName, + orderDetail.quantity, + orderDetail.orderStatusIndi, // 개별 상태 + // RefundStatus 없으면 null 주입 + Expressions.nullExpression(RefundStatus.class), + orderDetail.price + ) + ) + ) + ) + ); + + + return Map.of(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 3a18b0f8..6eb8f67b 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -1,11 +1,9 @@ package com.irum.come2us.domain.order.presentation.controller; +import java.time.LocalDate; import java.util.UUID; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.irum.come2us.domain.order.application.service.CustomerOrderService; import com.irum.come2us.domain.order.domain.entity.OrderDetail; @@ -40,8 +38,13 @@ public OrderDetailResponse orderDetailGet( /**주문 목록 조회*/ @GetMapping("") - public OrderListResponse orderListGet(){ - return customerOrderService.getOrderList(); + public OrderListResponse orderListGet( + @RequestParam UUID cursor, + @RequestParam int size, + @RequestParam LocalDate startDate, + @RequestParam LocalDate endDate + ){ + return customerOrderService.getOrderList(cursor, size, startDate, endDate); } } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java index 814f874f..ab76c511 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java @@ -14,6 +14,7 @@ public record OrderListResponse ( ){ public record OrderResponse( LocalDateTime orderAt, + RefundStatus refundStatus, List productResponseList ){ public record ProductResponse( From 3379e154227c5ef76463c8bc9398fb94f8751c00 Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Sat, 25 Oct 2025 18:18:36 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CustomerOrderMapper.java | 12 +++ .../order/application/mapper/OrderMapper.java | 2 + .../service/CustomerOrderService.java | 41 ++++----- .../application/service/OrderService.java | 2 +- .../repository/OrderRepositoryCustom.java | 6 +- .../repository/OrderRepositoryImpl.java | 84 ++++++++++--------- .../controller/CustomerOrderController.java | 6 +- ...se.java => CustomerOrderListResponse.java} | 30 ++++--- 8 files changed, 101 insertions(+), 82 deletions(-) rename src/main/java/com/irum/come2us/domain/order/presentation/dto/response/{OrderListResponse.java => CustomerOrderListResponse.java} (61%) diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java index 2bbf7bca..8010f5be 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java @@ -8,6 +8,7 @@ import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; @@ -54,4 +55,15 @@ private static OrderDetailResponse.ProductResponse toProductResponse(OrderDetail .quantity(orderDetail.getQuantity()) .build(); } + + public static CustomerOrderListResponse.OrderResponse toOrderResponse( + CustomerOrderListResponse.OrderResponse or, List pList + ){ + return CustomerOrderListResponse.OrderResponse.builder() + .orderId(or.orderId()) + .orderAt(or.orderAt()) + .refundStatus(or.refundStatus()) + .productResponseList(pList) + .build(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java index 3b96098a..346f2adf 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java @@ -8,6 +8,8 @@ @Component public class OrderMapper { + + //TODO: builder로 리팩터링 public OwnerOrderListResponse.ProductSummary toProductSummary(OrderDetailRow detail) { return new OwnerOrderListResponse.ProductSummary( detail.orderDetailId(), diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 7efcae66..8e135cdf 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -7,21 +7,19 @@ import java.util.stream.Collectors; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; -import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.OwnerOrderListResponse; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.application.mapper.CustomerOrderMapper; -import com.irum.come2us.domain.order.application.mapper.OrderMapper; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; import com.irum.come2us.domain.order.domain.repository.OrderRepository; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; -import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.repository.RefundRepository; import com.irum.come2us.global.presentation.advice.exception.CommonException; @@ -64,42 +62,32 @@ public OrderDetailResponse getOrderDetail(UUID orderId){ } @Transactional - public OrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate, LocalDate endDate){ + public CustomerOrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate, LocalDate endDate){ Member member = memberUtil.getCurrentMember(); List orderList = orderRepository.findAllByMember(member); // 2. order list 검색 - var headerList = - orderRepository.fetchOrderHeaderListByMember(member, startDate, endDate, cursor, size); + List headerList = + orderRepository.fetchOrderListByMember(member, startDate, endDate, cursor, size); boolean hasNext = headerList.size() > size; if (hasNext) { headerList = headerList.subList(0, size); } - // 3. order detail 검색 - List orderIdList = headerList.stream().map(Order::getOrderId).toList(); - - - var orderDetailList = orderRepository.fetchOrderDetailList(orderIdList); + // 3. order id list + List orderIdList = headerList.stream().map(CustomerOrderListResponse.OrderResponse::orderId).toList(); // 4. orderId로 그룹핑 : productSummary 제작 - Map> detailMap = - orderDetailList.stream() - .collect( - Collectors.groupingBy( - OrderDetailRow::orderId, - Collectors.mapping( - orderMapper::toProductSummary, - Collectors.toList()))); - - // 5. orderSummary 제작 - List orderSummaryList = + Map> detailMap = orderRepository.fetchOrderDetailListByMember(orderIdList); + + // 5. orderResponse 제작 + List orderResponseList = headerList.stream() .filter(order -> detailMap.containsKey(order.orderId())) .map( order -> - orderMapper.toOrderSummary( + CustomerOrderMapper.toOrderResponse( order, detailMap.getOrDefault( order.orderId(), @@ -108,8 +96,13 @@ public OrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate .toList(); // 6. next cursor계산 - UUID nextCursor = orderSummaryList.isEmpty() ? null : headerList.getLast().orderId(); + UUID nextCursor = orderResponseList.isEmpty() ? null : headerList.getLast().orderId(); + return CustomerOrderListResponse.builder() + .orderList(orderResponseList) + .hasNext(hasNext) + .nextCursor(nextCursor) + .build(); } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java index a49a2250..78838ea5 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java @@ -88,7 +88,7 @@ private OwnerOrderListResponse getOwnerOrderList( // 3. order detail 검색 var orderIdList = headerList.stream().map(OrderSummaryRow::orderId).toList(); - var orderDetailList = orderRepository.fetchOrderDetailList(orderIdList); + List orderDetailList = orderRepository.fetchOrderDetailList(orderIdList); // 4. orderId로 그룹핑 : productSummary 제작 Map> detailMap = diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java index 8a88eca6..3052a6a1 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java @@ -5,7 +5,7 @@ import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; -import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import java.time.LocalDate; import java.util.List; @@ -19,10 +19,10 @@ List fetchOrderHeaderList( List fetchOrderDetailList(List orderIdList); - List fetchOrderHeaderListByMember( + List fetchOrderListByMember( Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size); - Map> fetchOrderDetailListByMember( + Map> fetchOrderDetailListByMember( List orderIdList ); } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java index 3ec7596b..27f4c2b6 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java @@ -1,5 +1,8 @@ package com.irum.come2us.domain.order.infrastructure.repository; +import static com.querydsl.core.group.GroupBy.*; +import static java.util.Collections.*; + import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.QOrder; @@ -8,7 +11,9 @@ import com.irum.come2us.domain.order.domain.repository.OrderRepositoryCustom; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; -import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; +import com.irum.come2us.domain.refund.domain.entity.QRefund; +import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -71,6 +76,7 @@ public List fetchOrderDetailList(List orderIdList) { .select( Projections.constructor( OrderDetailRow.class, + od.order.orderId, od.orderDetailId, od.productName, od.quantity, @@ -81,58 +87,60 @@ public List fetchOrderDetailList(List orderIdList) { .fetch(); } + /**주목 목록 및 refundstatus 조회, pageing적용*/ @Override - public List fetchOrderHeaderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { + public List fetchOrderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { QOrder o = QOrder.order; + QRefund r = QRefund.refund; return queryFactory - .selectFrom(o) - .where( - o.member.memberId.eq(member.getMemberId()), - ltCursor(cursor, o), - o.createdAt.after(startDate.atStartOfDay()), - o.createdAt.before(endDate.atStartOfDay()) - ) - .orderBy(o.orderId.desc()) - .limit(size+1) - .fetch(); + .select( + Projections.constructor( + CustomerOrderListResponse.OrderResponse.class, + o.orderId, + o.createdAt, + r.refundStatus + )) + .from(o) + .leftJoin(r) + .where( + ltCursor(cursor, o), + o.member.memberId.eq(member.getMemberId()), + o.createdAt.after(startDate.atStartOfDay()), + o.createdAt.before(endDate.atStartOfDay()) + ) + .orderBy(o.orderId.desc()) + .limit(size+1) + .fetch(); } @Override - public Map> fetchOrderDetailListByMember(List orderIdList) { + public Map> fetchOrderDetailListByMember(List orderIdList) { if (orderIdList.isEmpty()) { return Map.of(); } QOrder o = QOrder.order; - + QOrderDetail od = QOrderDetail.orderDetail; return queryFactory - .from(o) - .join(o., orderDetail) - .where(order.orderId.in(orderIds)) + .from(od) + .where(od.order.orderId.in(orderIdList)) .transform( - GroupBy.groupBy(order.orderId).as( - Projections.constructor( - OrderListResponse.OrderResponse.class, - order.createdAt, // orderAt - GroupBy.list( - Projections.constructor( - OrderListResponse.OrderResponse.ProductResponse.class, - orderDetail.orderDetailId, - orderDetail.optionName, - orderDetail.quantity, - orderDetail.orderStatusIndi, // 개별 상태 - // RefundStatus 없으면 null 주입 - Expressions.nullExpression(RefundStatus.class), - orderDetail.price - ) - ) - ) - ) + groupBy(od.order.orderId) + .as( + + list( + Projections.constructor( + CustomerOrderListResponse.ProductResponse.class, + od.orderDetailId, + od.productName, + od.optionName, + od.quantity, + od.price, + od.orderStatusIndi + ) + )) ); - - - return Map.of(); } } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 6eb8f67b..88bc49bc 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -6,12 +6,10 @@ import org.springframework.web.bind.annotation.*; import com.irum.come2us.domain.order.application.service.CustomerOrderService; -import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; -import com.irum.come2us.domain.order.presentation.dto.response.OrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; -import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @@ -38,7 +36,7 @@ public OrderDetailResponse orderDetailGet( /**주문 목록 조회*/ @GetMapping("") - public OrderListResponse orderListGet( + public CustomerOrderListResponse orderListGet( @RequestParam UUID cursor, @RequestParam int size, @RequestParam LocalDate startDate, diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java similarity index 61% rename from src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java rename to src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java index ab76c511..d31f0e3a 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderListResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java @@ -7,23 +7,29 @@ import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; -public record OrderListResponse ( - String nextCursor, +import lombok.Builder; + +@Builder +public record CustomerOrderListResponse( + UUID nextCursor, Boolean hasNext, List orderList ){ + @Builder public record OrderResponse( + UUID orderId, LocalDateTime orderAt, RefundStatus refundStatus, List productResponseList - ){ - public record ProductResponse( - UUID orderDetailId, - String optionName, - int quantity, - OrderStatus orderStatus, - RefundStatus refundStatus, - int price - ){} - } + ){} + @Builder + public record ProductResponse( + UUID orderDetailId, + String optionName, + int quantity, + OrderStatus orderStatus, + RefundStatus refundStatus, + int price + ){} + } From 1b116e4c9d0eb3f114ab941cbce231014ff4a97d Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Sun, 26 Oct 2025 03:05:34 +0900 Subject: [PATCH 06/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../mapper/CustomerOrderMapper.java | 18 ++++- .../service/CustomerOrderService.java | 30 ++++++--- .../repository/OrderRepositoryCustom.java | 6 +- .../repository/OrderRepositoryImpl.java | 66 +++++++++++-------- .../dto/CustomerOrderDetailRow.java | 16 +++++ .../dto/CustomerOrderSummaryRow.java | 13 ++++ .../controller/CustomerOrderController.java | 8 +-- .../response/CustomerOrderListResponse.java | 9 +-- 9 files changed, 122 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java create mode 100644 src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java diff --git a/build.gradle b/build.gradle index d5ec7def..da8b87b9 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,7 @@ dependencies { annotationProcessor "com.querydsl:querydsl-apt::jakarta" annotationProcessor "jakarta.persistence:jakarta.persistence-api" + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java index 8010f5be..046e32cc 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java @@ -2,11 +2,16 @@ import java.time.LocalDate; import java.util.List; +import java.util.Map; +import java.util.UUID; import org.springframework.stereotype.Component; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; @@ -57,8 +62,9 @@ private static OrderDetailResponse.ProductResponse toProductResponse(OrderDetail } public static CustomerOrderListResponse.OrderResponse toOrderResponse( - CustomerOrderListResponse.OrderResponse or, List pList + CustomerOrderSummaryRow or, List pList ){ + return CustomerOrderListResponse.OrderResponse.builder() .orderId(or.orderId()) .orderAt(or.orderAt()) @@ -66,4 +72,14 @@ public static CustomerOrderListResponse.OrderResponse toOrderResponse( .productResponseList(pList) .build(); } + public static CustomerOrderListResponse.ProductResponse toProductResponse(CustomerOrderDetailRow c){ + return CustomerOrderListResponse.ProductResponse.builder() + .orderStatus(c.orderStatusIndi()) + .orderDetailId(c.orderDetailId()) + .optionName(c.optionName()) + .price(c.price()) + .productName(c.productName()) + .quantity(c.quantity()) + .build(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 8e135cdf..9ea9275e 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -6,6 +6,8 @@ import java.util.UUID; import java.util.stream.Collectors; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.presentation.dto.response.OwnerOrderListResponse; import org.springframework.stereotype.Service; @@ -63,25 +65,37 @@ public OrderDetailResponse getOrderDetail(UUID orderId){ @Transactional public CustomerOrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate, LocalDate endDate){ + Member member = memberUtil.getCurrentMember(); - List orderList = orderRepository.findAllByMember(member); + log.info("member {}", member.getMemberId()); // 2. order list 검색 - List headerList = + List headerList = orderRepository.fetchOrderListByMember(member, startDate, endDate, cursor, size); + log.info("order list {}", headerList); boolean hasNext = headerList.size() > size; if (hasNext) { headerList = headerList.subList(0, size); } + log.info("hasNext {}", hasNext); // 3. order id list - List orderIdList = headerList.stream().map(CustomerOrderListResponse.OrderResponse::orderId).toList(); - - // 4. orderId로 그룹핑 : productSummary 제작 - Map> detailMap = orderRepository.fetchOrderDetailListByMember(orderIdList); - - // 5. orderResponse 제작 + List orderIdList = headerList.stream().map(CustomerOrderSummaryRow::orderId).toList(); + List orderDetailList = orderRepository.fetchOrderDetailListByMember(orderIdList); + log.info("orderDetailList ", orderDetailList); + + // 4. orderId로 그룹핑 : productSummary 제작 + Map> detailMap = + orderDetailList.stream() + .collect( + Collectors.groupingBy( + CustomerOrderDetailRow::orderId, + Collectors.mapping( + CustomerOrderMapper::toProductResponse, + Collectors.toList()))); + + // 5. orderResponse 제작 List orderResponseList = headerList.stream() .filter(order -> detailMap.containsKey(order.orderId())) diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java index 3052a6a1..f9335e0e 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java @@ -3,6 +3,8 @@ import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; @@ -19,10 +21,10 @@ List fetchOrderHeaderList( List fetchOrderDetailList(List orderIdList); - List fetchOrderListByMember( + List fetchOrderListByMember( Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size); - Map> fetchOrderDetailListByMember( + List fetchOrderDetailListByMember( List orderIdList ); } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java index 27f4c2b6..e1c4b7e9 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java @@ -4,11 +4,14 @@ import static java.util.Collections.*; import com.irum.come2us.domain.member.domain.entity.Member; +import com.irum.come2us.domain.member.domain.entity.QMember; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.QOrder; import com.irum.come2us.domain.order.domain.entity.QOrderDetail; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.domain.repository.OrderRepositoryCustom; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; @@ -35,6 +38,16 @@ private BooleanExpression ltCursor(UUID cursor, QOrder qOrder) { return cursor != null ? qOrder.orderId.lt(cursor) : null; } + /** createdAt >= startDate(00:00:00). null이면 필터 없음 */ + private BooleanExpression geStartDate(LocalDate startDate, QOrder o) { + return (startDate == null) ? null : o.createdAt.goe(startDate.atStartOfDay()); + } + + /** createdAt < (endDate + 1일 00:00:00). null이면 필터 없음 */ + private BooleanExpression ltEndDateExclusive(LocalDate endDate, QOrder o) { + return (endDate == null) ? null : o.createdAt.lt(endDate.plusDays(1).atStartOfDay()); + } + /** [상점] 주문 목록 조회 */ @Override public List fetchOrderHeaderList( @@ -89,26 +102,29 @@ public List fetchOrderDetailList(List orderIdList) { /**주목 목록 및 refundstatus 조회, pageing적용*/ @Override - public List fetchOrderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { + public List fetchOrderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { QOrder o = QOrder.order; QRefund r = QRefund.refund; + QMember m = QMember.member; return queryFactory .select( Projections.constructor( - CustomerOrderListResponse.OrderResponse.class, + CustomerOrderSummaryRow.class, o.orderId, o.createdAt, r.refundStatus )) .from(o) .leftJoin(r) + .on(r.order.eq(o)) + .leftJoin(o.member, m) .where( ltCursor(cursor, o), - o.member.memberId.eq(member.getMemberId()), - o.createdAt.after(startDate.atStartOfDay()), - o.createdAt.before(endDate.atStartOfDay()) + m.memberId.eq(member.getMemberId()), + geStartDate(startDate, o), + ltEndDateExclusive(endDate, o) ) .orderBy(o.orderId.desc()) .limit(size+1) @@ -116,31 +132,29 @@ public List fetchOrderListByMember(Memb } @Override - public Map> fetchOrderDetailListByMember(List orderIdList) { + public List fetchOrderDetailListByMember(List orderIdList) { if (orderIdList.isEmpty()) { - return Map.of(); + return List.of(); } - QOrder o = QOrder.order; QOrderDetail od = QOrderDetail.orderDetail; + return queryFactory - .from(od) - .where(od.order.orderId.in(orderIdList)) - .transform( - groupBy(od.order.orderId) - .as( - - list( - Projections.constructor( - CustomerOrderListResponse.ProductResponse.class, - od.orderDetailId, - od.productName, - od.optionName, - od.quantity, - od.price, - od.orderStatusIndi - ) - )) - ); + .select( + Projections.constructor( + CustomerOrderDetailRow.class, + od.order.orderId, + od.orderDetailId, + od.productName, + od.optionName, + od.quantity, + od.price, + od.orderStatusIndi + ) + ) + .from(od) + .where(od.order.orderId.in(orderIdList)) + .fetch(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java new file mode 100644 index 00000000..721863d6 --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java @@ -0,0 +1,16 @@ +package com.irum.come2us.domain.order.infrastructure.repository.dto; + +import java.util.UUID; + +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; + +/** 내부용 주문 상세 DTO */ +public record CustomerOrderDetailRow( + UUID orderId, + UUID orderDetailId, + String productName, + String optionName, + int quantity, + int price, + OrderStatus orderStatusIndi +) {} diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java new file mode 100644 index 00000000..3158818d --- /dev/null +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java @@ -0,0 +1,13 @@ +package com.irum.come2us.domain.order.infrastructure.repository.dto; + +import java.time.LocalDateTime; +import java.util.UUID; + +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; + +/** 내부용 주문 헤더 DTO (productList 없는 버전) */ +public record CustomerOrderSummaryRow( + UUID orderId, + LocalDateTime orderAt, + RefundStatus refundStatus +) {} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 88bc49bc..1a8b51cf 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -35,12 +35,12 @@ public OrderDetailResponse orderDetailGet( } /**주문 목록 조회*/ - @GetMapping("") + @GetMapping public CustomerOrderListResponse orderListGet( - @RequestParam UUID cursor, + @RequestParam(required = false) UUID cursor, @RequestParam int size, - @RequestParam LocalDate startDate, - @RequestParam LocalDate endDate + @RequestParam(required = false) LocalDate startDate, + @RequestParam(required = false) LocalDate endDate ){ return customerOrderService.getOrderList(cursor, size, startDate, endDate); } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java index d31f0e3a..4e643038 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java @@ -21,15 +21,16 @@ public record OrderResponse( LocalDateTime orderAt, RefundStatus refundStatus, List productResponseList - ){} + ){ + } @Builder public record ProductResponse( UUID orderDetailId, + String productName, String optionName, int quantity, - OrderStatus orderStatus, - RefundStatus refundStatus, - int price + int price, + OrderStatus orderStatus ){} } From 839b5f62f27c6a802e6ba910922bef9de95f0606 Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Sun, 26 Oct 2025 03:11:41 +0900 Subject: [PATCH 07/11] =?UTF-8?q?style=20#182=20:=20spotless=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CustomerOrderMapper.java | 122 +++++++++-------- .../order/application/mapper/OrderMapper.java | 2 +- .../service/CustomerOrderService.java | 125 +++++++++--------- .../application/service/OrderService.java | 4 +- .../domain/repository/OrderRepository.java | 3 - .../repository/OrderRepositoryCustom.java | 9 +- .../repository/OrderRepositoryImpl.java | 76 +++++------ .../dto/CustomerOrderDetailRow.java | 16 +-- .../dto/CustomerOrderSummaryRow.java | 8 +- .../controller/CustomerOrderController.java | 58 ++++---- .../dto/response/AddressResponse.java | 28 ++-- .../response/CustomerOrderListResponse.java | 42 +++--- .../dto/response/OrderDetailResponse.java | 61 ++++----- .../response/OrderDetailStatusResponse.java | 41 +++--- .../domain/refund/domain/entity/Refund.java | 1 - .../domain/repository/RefundRepository.java | 8 +- 16 files changed, 265 insertions(+), 339 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java index 046e32cc..7093268f 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java @@ -1,85 +1,81 @@ package com.irum.come2us.domain.order.application.mapper; -import java.time.LocalDate; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.springframework.stereotype.Component; - import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; -import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; +import java.util.List; +import org.springframework.stereotype.Component; @Component public class CustomerOrderMapper { - public static OrderDetailResponse toOrderDetailResponse(Order order, List orderDetailList, Refund refund){ - List pList = orderDetailList.stream() - .map(CustomerOrderMapper::toProductResponse).toList(); + public static OrderDetailResponse toOrderDetailResponse( + Order order, List orderDetailList, Refund refund) { + List pList = + orderDetailList.stream().map(CustomerOrderMapper::toProductResponse).toList(); + + RefundStatus refundStatus; + if (refund == null) { + refundStatus = null; + } else { + refundStatus = refund.getRefundStatus(); + } - RefundStatus refundStatus; - if (refund == null){ - refundStatus = null; - } else { - refundStatus = refund.getRefundStatus(); - } + return OrderDetailResponse.builder() + .orderAt(order.getCreatedAt()) + .paymentStatus(order.getPayment().getPaymentStatus()) + .paymentMethod(order.getPayment().getPaymentMethod()) + .deliveryFee(order.getDeliveryFee()) + .discountAmount(order.getPayment().getTotalDiscountAmount()) + .totalProductPrice(order.getTotalPrice()) + .totalPaymentPrice(order.getPayment().getAmount()) + .orderStatusAll(order.getOrderStatusAll()) + .refundStatus(refundStatus) + .deliveryRequest(order.getDeliveryRequest()) + .address(AddressResponse.from(order.getDeliveryAddress().getAddress())) + .recipientContact(order.getDeliveryAddress().getRecipientContact()) + .recipientName(order.getDeliveryAddress().getRecipientName()) + .productResponseList(pList) + .build(); + } - return OrderDetailResponse.builder() - .orderAt(order.getCreatedAt()) - .paymentStatus(order.getPayment().getPaymentStatus()) - .paymentMethod(order.getPayment().getPaymentMethod()) - .deliveryFee(order.getDeliveryFee()) - .discountAmount(order.getPayment().getTotalDiscountAmount()) - .totalProductPrice(order.getTotalPrice()) - .totalPaymentPrice(order.getPayment().getAmount()) - .orderStatusAll(order.getOrderStatusAll()) - .refundStatus(refundStatus) - .deliveryRequest(order.getDeliveryRequest()) - .address(AddressResponse.from(order.getDeliveryAddress().getAddress())) - .recipientContact(order.getDeliveryAddress().getRecipientContact()) - .recipientName(order.getDeliveryAddress().getRecipientName()) - .productResponseList(pList) - .build(); - } + private static OrderDetailResponse.ProductResponse toProductResponse(OrderDetail orderDetail) { - private static OrderDetailResponse.ProductResponse toProductResponse(OrderDetail orderDetail){ + return OrderDetailResponse.ProductResponse.builder() + .receivedDate(orderDetail.getArrivedDate().toLocalDate()) + .productName(orderDetail.getProductName()) + .optionTitle(orderDetail.getOptionName()) + .price(orderDetail.getPrice()) + .quantity(orderDetail.getQuantity()) + .build(); + } - return OrderDetailResponse.ProductResponse.builder() - .receivedDate(orderDetail.getArrivedDate().toLocalDate()) - .productName(orderDetail.getProductName()) - .optionTitle(orderDetail.getOptionName()) - .price(orderDetail.getPrice()) - .quantity(orderDetail.getQuantity()) - .build(); - } + public static CustomerOrderListResponse.OrderResponse toOrderResponse( + CustomerOrderSummaryRow or, List pList) { - public static CustomerOrderListResponse.OrderResponse toOrderResponse( - CustomerOrderSummaryRow or, List pList - ){ + return CustomerOrderListResponse.OrderResponse.builder() + .orderId(or.orderId()) + .orderAt(or.orderAt()) + .refundStatus(or.refundStatus()) + .productResponseList(pList) + .build(); + } - return CustomerOrderListResponse.OrderResponse.builder() - .orderId(or.orderId()) - .orderAt(or.orderAt()) - .refundStatus(or.refundStatus()) - .productResponseList(pList) - .build(); - } - public static CustomerOrderListResponse.ProductResponse toProductResponse(CustomerOrderDetailRow c){ - return CustomerOrderListResponse.ProductResponse.builder() - .orderStatus(c.orderStatusIndi()) - .orderDetailId(c.orderDetailId()) - .optionName(c.optionName()) - .price(c.price()) - .productName(c.productName()) - .quantity(c.quantity()) - .build(); - } + public static CustomerOrderListResponse.ProductResponse toProductResponse( + CustomerOrderDetailRow c) { + return CustomerOrderListResponse.ProductResponse.builder() + .orderStatus(c.orderStatusIndi()) + .orderDetailId(c.orderDetailId()) + .optionName(c.optionName()) + .price(c.price()) + .productName(c.productName()) + .quantity(c.quantity()) + .build(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java index 346f2adf..29a9efe4 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/OrderMapper.java @@ -9,7 +9,7 @@ @Component public class OrderMapper { - //TODO: builder로 리팩터링 + // TODO: builder로 리팩터링 public OwnerOrderListResponse.ProductSummary toProductSummary(OrderDetailRow detail) { return new OwnerOrderListResponse.ProductSummary( detail.orderDetailId(), diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 9ea9275e..6da53c1e 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -1,101 +1,101 @@ package com.irum.come2us.domain.order.application.service; -import java.time.LocalDate; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; -import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; -import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; -import com.irum.come2us.domain.order.presentation.dto.response.OwnerOrderListResponse; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.application.mapper.CustomerOrderMapper; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; import com.irum.come2us.domain.order.domain.repository.OrderRepository; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; +import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.repository.RefundRepository; import com.irum.come2us.global.presentation.advice.exception.CommonException; import com.irum.come2us.global.presentation.advice.exception.errorcode.OrderErrorCode; import com.irum.come2us.global.util.MemberUtil; - +import java.time.LocalDate; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @Slf4j @RequiredArgsConstructor @Transactional public class CustomerOrderService { - private final OrderDetailRepository orderDetailRepository; - private final OrderRepository orderRepository; - private final RefundRepository refundRepository; - private final MemberUtil memberUtil; + private final OrderDetailRepository orderDetailRepository; + private final OrderRepository orderRepository; + private final RefundRepository refundRepository; + private final MemberUtil memberUtil; - @Transactional(readOnly = true) - public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId){ - OrderDetail orderDetail = orderDetailRepository.findByOrderDetailId(orderDetailId) - .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_DETAIL_NOT_FOUND)); + @Transactional(readOnly = true) + public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId) { + OrderDetail orderDetail = + orderDetailRepository + .findByOrderDetailId(orderDetailId) + .orElseThrow( + () -> new CommonException(OrderErrorCode.ORDER_DETAIL_NOT_FOUND)); - return OrderDetailStatusResponse.from(orderDetail); - } + return OrderDetailStatusResponse.from(orderDetail); + } + @Transactional(readOnly = true) + public OrderDetailResponse getOrderDetail(UUID orderId) { + Order order = + orderRepository + .findByOrderId(orderId) + .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_NOT_FOUND)); - @Transactional(readOnly = true) - public OrderDetailResponse getOrderDetail(UUID orderId){ - Order order = orderRepository.findByOrderId(orderId) - .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_NOT_FOUND)); + List orderDetailList = orderDetailRepository.findAllByOrder(order); - List orderDetailList = orderDetailRepository.findAllByOrder(order); + Refund refund = refundRepository.findByOrder(order).orElse(null); - Refund refund = refundRepository.findByOrder(order).orElse(null); + return CustomerOrderMapper.toOrderDetailResponse(order, orderDetailList, refund); + } - return CustomerOrderMapper.toOrderDetailResponse(order, orderDetailList, refund); + @Transactional + public CustomerOrderListResponse getOrderList( + UUID cursor, int size, LocalDate startDate, LocalDate endDate) { - } - - @Transactional - public CustomerOrderListResponse getOrderList(UUID cursor, int size, LocalDate startDate, LocalDate endDate){ - - Member member = memberUtil.getCurrentMember(); - log.info("member {}", member.getMemberId()); + Member member = memberUtil.getCurrentMember(); + log.info("member {}", member.getMemberId()); // 2. order list 검색 List headerList = orderRepository.fetchOrderListByMember(member, startDate, endDate, cursor, size); - log.info("order list {}", headerList); + log.info("order list {}", headerList); boolean hasNext = headerList.size() > size; if (hasNext) { headerList = headerList.subList(0, size); } - log.info("hasNext {}", hasNext); + log.info("hasNext {}", hasNext); // 3. order id list List orderIdList = headerList.stream().map(CustomerOrderSummaryRow::orderId).toList(); - List orderDetailList = orderRepository.fetchOrderDetailListByMember(orderIdList); - log.info("orderDetailList ", orderDetailList); - - // 4. orderId로 그룹핑 : productSummary 제작 - Map> detailMap = - orderDetailList.stream() - .collect( - Collectors.groupingBy( - CustomerOrderDetailRow::orderId, - Collectors.mapping( - CustomerOrderMapper::toProductResponse, - Collectors.toList()))); - - // 5. orderResponse 제작 + List orderDetailList = + orderRepository.fetchOrderDetailListByMember(orderIdList); + log.info("orderDetailList ", orderDetailList); + + // 4. orderId로 그룹핑 : productSummary 제작 + Map> detailMap = + orderDetailList.stream() + .collect( + Collectors.groupingBy( + CustomerOrderDetailRow::orderId, + Collectors.mapping( + CustomerOrderMapper::toProductResponse, + Collectors.toList()))); + + // 5. orderResponse 제작 List orderResponseList = headerList.stream() .filter(order -> detailMap.containsKey(order.orderId())) @@ -106,17 +106,16 @@ public CustomerOrderListResponse getOrderList(UUID cursor, int size, LocalDate s detailMap.getOrDefault( order.orderId(), List.of()) // order detail 없다면 빈 리스트 - )) + )) .toList(); // 6. next cursor계산 UUID nextCursor = orderResponseList.isEmpty() ? null : headerList.getLast().orderId(); - - return CustomerOrderListResponse.builder() - .orderList(orderResponseList) - .hasNext(hasNext) - .nextCursor(nextCursor) - .build(); - } + return CustomerOrderListResponse.builder() + .orderList(orderResponseList) + .hasNext(hasNext) + .nextCursor(nextCursor) + .build(); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java index 78838ea5..d329bde2 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/OrderService.java @@ -6,7 +6,6 @@ import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; import com.irum.come2us.domain.order.domain.repository.OrderRepository; -import com.irum.come2us.domain.order.domain.repository.OrderRepositoryCustom; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.request.OwnerOrderShippedRequest; @@ -78,8 +77,7 @@ private OwnerOrderListResponse getOwnerOrderList( UUID storeId, OrderStatus orderStatus, UUID cursor, Integer size) { // 2. order list 검색 - var headerList = - orderRepository.fetchOrderHeaderList(storeId, orderStatus, cursor, size); + var headerList = orderRepository.fetchOrderHeaderList(storeId, orderStatus, cursor, size); boolean hasNext = headerList.size() > size; if (hasNext) { diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java index 4b6a7528..5f4c0087 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java @@ -2,12 +2,9 @@ import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.order.domain.entity.Order; - import java.util.List; import java.util.Optional; import java.util.UUID; - -import org.aspectj.weaver.ast.Or; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java index f9335e0e..22a43842 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepositoryCustom.java @@ -1,17 +1,13 @@ package com.irum.come2us.domain.order.domain.repository; import com.irum.come2us.domain.member.domain.entity.Member; -import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; - import java.time.LocalDate; import java.util.List; -import java.util.Map; import java.util.UUID; public interface OrderRepositoryCustom { @@ -20,11 +16,8 @@ List fetchOrderHeaderList( List fetchOrderDetailList(List orderIdList); - List fetchOrderListByMember( Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size); - List fetchOrderDetailListByMember( - List orderIdList - ); + List fetchOrderDetailListByMember(List orderIdList); } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java index e1c4b7e9..6a0f225c 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/OrderRepositoryImpl.java @@ -5,7 +5,6 @@ import com.irum.come2us.domain.member.domain.entity.Member; import com.irum.come2us.domain.member.domain.entity.QMember; -import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.QOrder; import com.irum.come2us.domain.order.domain.entity.QOrderDetail; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; @@ -14,16 +13,12 @@ import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.OrderSummaryRow; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.refund.domain.entity.QRefund; -import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import java.time.LocalDate; import java.util.List; -import java.util.Map; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -100,35 +95,34 @@ public List fetchOrderDetailList(List orderIdList) { .fetch(); } - /**주목 목록 및 refundstatus 조회, pageing적용*/ + /** 주목 목록 및 refundstatus 조회, pageing적용 */ @Override - public List fetchOrderListByMember(Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { + public List fetchOrderListByMember( + Member member, LocalDate startDate, LocalDate endDate, UUID cursor, int size) { QOrder o = QOrder.order; QRefund r = QRefund.refund; QMember m = QMember.member; return queryFactory - .select( - Projections.constructor( - CustomerOrderSummaryRow.class, - o.orderId, - o.createdAt, - r.refundStatus - )) - .from(o) - .leftJoin(r) + .select( + Projections.constructor( + CustomerOrderSummaryRow.class, + o.orderId, + o.createdAt, + r.refundStatus)) + .from(o) + .leftJoin(r) .on(r.order.eq(o)) - .leftJoin(o.member, m) - .where( - ltCursor(cursor, o), - m.memberId.eq(member.getMemberId()), - geStartDate(startDate, o), - ltEndDateExclusive(endDate, o) - ) - .orderBy(o.orderId.desc()) - .limit(size+1) - .fetch(); + .leftJoin(o.member, m) + .where( + ltCursor(cursor, o), + m.memberId.eq(member.getMemberId()), + geStartDate(startDate, o), + ltEndDateExclusive(endDate, o)) + .orderBy(o.orderId.desc()) + .limit(size + 1) + .fetch(); } @Override @@ -138,23 +132,19 @@ public List fetchOrderDetailListByMember(List orde } QOrderDetail od = QOrderDetail.orderDetail; - return queryFactory - .select( - Projections.constructor( - CustomerOrderDetailRow.class, - od.order.orderId, - od.orderDetailId, - od.productName, - od.optionName, - od.quantity, - od.price, - od.orderStatusIndi - ) - ) - .from(od) - .where(od.order.orderId.in(orderIdList)) - .fetch(); - + .select( + Projections.constructor( + CustomerOrderDetailRow.class, + od.order.orderId, + od.orderDetailId, + od.productName, + od.optionName, + od.quantity, + od.price, + od.orderStatusIndi)) + .from(od) + .where(od.order.orderId.in(orderIdList)) + .fetch(); } } diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java index 721863d6..57e634c9 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderDetailRow.java @@ -1,16 +1,14 @@ package com.irum.come2us.domain.order.infrastructure.repository.dto; -import java.util.UUID; - import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; +import java.util.UUID; /** 내부용 주문 상세 DTO */ public record CustomerOrderDetailRow( UUID orderId, - UUID orderDetailId, - String productName, - String optionName, - int quantity, - int price, - OrderStatus orderStatusIndi -) {} + UUID orderDetailId, + String productName, + String optionName, + int quantity, + int price, + OrderStatus orderStatusIndi) {} diff --git a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java index 3158818d..9676355b 100644 --- a/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java +++ b/src/main/java/com/irum/come2us/domain/order/infrastructure/repository/dto/CustomerOrderSummaryRow.java @@ -1,13 +1,9 @@ package com.irum.come2us.domain.order.infrastructure.repository.dto; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; import java.time.LocalDateTime; import java.util.UUID; -import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; - /** 내부용 주문 헤더 DTO (productList 없는 버전) */ public record CustomerOrderSummaryRow( - UUID orderId, - LocalDateTime orderAt, - RefundStatus refundStatus -) {} + UUID orderId, LocalDateTime orderAt, RefundStatus refundStatus) {} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index 1a8b51cf..b66132b8 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -1,48 +1,40 @@ package com.irum.come2us.domain.order.presentation.controller; -import java.time.LocalDate; -import java.util.UUID; - -import org.springframework.web.bind.annotation.*; - import com.irum.come2us.domain.order.application.service.CustomerOrderService; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; - +import java.time.LocalDate; +import java.util.UUID; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor @RestController @RequestMapping("orders/customer") public class CustomerOrderController { - private final CustomerOrderService customerOrderService; - - /**주문 상태 조회*/ - @GetMapping("/order-detail/{orderDetailId}/delivery-status") - public OrderDetailStatusResponse orderDetailStatusGet( - @PathVariable(name="orderDetailId") UUID orderDetailId - ){ - return customerOrderService.getOrderDetailStatus(orderDetailId); - } - - /**주문 상세 조회*/ - @GetMapping("/{orderId}") - public OrderDetailResponse orderDetailGet( - @PathVariable(name="orderId") UUID orderId - ) { - return customerOrderService.getOrderDetail(orderId); - } - - /**주문 목록 조회*/ - @GetMapping - public CustomerOrderListResponse orderListGet( + private final CustomerOrderService customerOrderService; + + /** 주문 상태 조회 */ + @GetMapping("/order-detail/{orderDetailId}/delivery-status") + public OrderDetailStatusResponse orderDetailStatusGet( + @PathVariable(name = "orderDetailId") UUID orderDetailId) { + return customerOrderService.getOrderDetailStatus(orderDetailId); + } + + /** 주문 상세 조회 */ + @GetMapping("/{orderId}") + public OrderDetailResponse orderDetailGet(@PathVariable(name = "orderId") UUID orderId) { + return customerOrderService.getOrderDetail(orderId); + } + + /** 주문 목록 조회 */ + @GetMapping + public CustomerOrderListResponse orderListGet( @RequestParam(required = false) UUID cursor, @RequestParam int size, @RequestParam(required = false) LocalDate startDate, - @RequestParam(required = false) LocalDate endDate - ){ - return customerOrderService.getOrderList(cursor, size, startDate, endDate); - } - + @RequestParam(required = false) LocalDate endDate) { + return customerOrderService.getOrderList(cursor, size, startDate, endDate); + } } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java index 02826755..08b83465 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/AddressResponse.java @@ -2,22 +2,14 @@ import com.irum.come2us.domain.deliveryaddress.domain.entity.Address; - - public record AddressResponse( - String postalCode, - String city, - String sigungu, - String roadname, - String addressDetail -) { - public static AddressResponse from(Address address) { - return new AddressResponse( - address.getPostalCode(), - address.getCity(), - address.getSigungu(), - address.getRoadName(), - address.getAddressDetail() - ); - } -} \ No newline at end of file + String postalCode, String city, String sigungu, String roadname, String addressDetail) { + public static AddressResponse from(Address address) { + return new AddressResponse( + address.getPostalCode(), + address.getCity(), + address.getSigungu(), + address.getRoadName(), + address.getAddressDetail()); + } +} diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java index 4e643038..5a487f6b 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/CustomerOrderListResponse.java @@ -1,36 +1,28 @@ package com.irum.come2us.domain.order.presentation.dto.response; +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; import java.time.LocalDateTime; import java.util.List; import java.util.UUID; - -import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; -import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; - import lombok.Builder; @Builder public record CustomerOrderListResponse( - UUID nextCursor, - Boolean hasNext, - List orderList -){ - @Builder - public record OrderResponse( - UUID orderId, - LocalDateTime orderAt, - RefundStatus refundStatus, - List productResponseList - ){ - } - @Builder - public record ProductResponse( - UUID orderDetailId, - String productName, - String optionName, - int quantity, - int price, - OrderStatus orderStatus - ){} + UUID nextCursor, Boolean hasNext, List orderList) { + @Builder + public record OrderResponse( + UUID orderId, + LocalDateTime orderAt, + RefundStatus refundStatus, + List productResponseList) {} + @Builder + public record ProductResponse( + UUID orderDetailId, + String productName, + String optionName, + int quantity, + int price, + OrderStatus orderStatus) {} } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java index 1de4fd46..b232132a 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailResponse.java @@ -1,47 +1,36 @@ package com.irum.come2us.domain.order.presentation.dto.response; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - -import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.payment.domain.entity.enums.PaymentMethod; import com.irum.come2us.domain.payment.domain.entity.enums.PaymentStatus; import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; - +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; import lombok.Builder; @Builder public record OrderDetailResponse( - LocalDateTime orderAt, - PaymentStatus paymentStatus, - PaymentMethod paymentMethod, - int deliveryFee, - int discountAmount, - int totalProductPrice, - int totalPaymentPrice, - - OrderStatus orderStatusAll, - RefundStatus refundStatus, - String deliveryRequest, - AddressResponse address, - String recipientContact, - String recipientName, - - List productResponseList -) { - - - @Builder - public record ProductResponse( - String productName, - String optionTitle, - int quantity, - int price, - LocalDate receivedDate - ){ - - } + LocalDateTime orderAt, + PaymentStatus paymentStatus, + PaymentMethod paymentMethod, + int deliveryFee, + int discountAmount, + int totalProductPrice, + int totalPaymentPrice, + OrderStatus orderStatusAll, + RefundStatus refundStatus, + String deliveryRequest, + AddressResponse address, + String recipientContact, + String recipientName, + List productResponseList) { + + @Builder + public record ProductResponse( + String productName, + String optionTitle, + int quantity, + int price, + LocalDate receivedDate) {} } diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java index 0ae1d8dc..c70e0c7e 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java @@ -1,29 +1,26 @@ package com.irum.come2us.domain.order.presentation.dto.response; -import com.irum.come2us.domain.deliveryaddress.domain.entity.Address; import com.irum.come2us.domain.order.domain.entity.OrderDetail; import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; public record OrderDetailStatusResponse( - String productName, - int quantity, - String optionName, - AddressResponse address, - String recipientName, - OrderStatus orderStatus, - Integer trackingNumber, - String deliveryRequest -) { - public static OrderDetailStatusResponse from(OrderDetail orderDetail){ - return new OrderDetailStatusResponse( - orderDetail.getProductName(), - orderDetail.getQuantity(), - orderDetail.getOptionName(), - AddressResponse.from(orderDetail.getOrder().getDeliveryAddress().getAddress()), - orderDetail.getOrder().getDeliveryAddress().getRecipientName(), - orderDetail.getOrderStatusIndi(), - orderDetail.getTrackingNumber(), - orderDetail.getOrder().getDeliveryRequest() - ); - } + String productName, + int quantity, + String optionName, + AddressResponse address, + String recipientName, + OrderStatus orderStatus, + Integer trackingNumber, + String deliveryRequest) { + public static OrderDetailStatusResponse from(OrderDetail orderDetail) { + return new OrderDetailStatusResponse( + orderDetail.getProductName(), + orderDetail.getQuantity(), + orderDetail.getOptionName(), + AddressResponse.from(orderDetail.getOrder().getDeliveryAddress().getAddress()), + orderDetail.getOrder().getDeliveryAddress().getRecipientName(), + orderDetail.getOrderStatusIndi(), + orderDetail.getTrackingNumber(), + orderDetail.getOrder().getDeliveryRequest()); + } } diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java index aa6c1493..d390cad9 100644 --- a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java +++ b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java @@ -9,7 +9,6 @@ import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; -import lombok.Generated; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.SQLDelete; diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java index 6e1febd3..0926f57b 100644 --- a/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java +++ b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java @@ -1,15 +1,13 @@ package com.irum.come2us.domain.refund.domain.repository; +import com.irum.come2us.domain.order.domain.entity.Order; +import com.irum.come2us.domain.refund.domain.entity.Refund; import java.util.Optional; import java.util.UUID; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import com.irum.come2us.domain.order.domain.entity.Order; -import com.irum.come2us.domain.refund.domain.entity.Refund; - @Repository public interface RefundRepository extends JpaRepository { - Optional findByOrder(Order order); + Optional findByOrder(Order order); } From d49790d4495a4c195efcc732e45f6a3a9f59a8df Mon Sep 17 00:00:00 2001 From: hyeonji91 <112065014+hyeonji91@users.noreply.github.com> Date: Sun, 26 Oct 2025 03:15:56 +0900 Subject: [PATCH 08/11] =?UTF-8?q?feature=20#182=20:=20spotless=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/irum/come2us/domain/refund/domain/entity/Refund.java | 1 - .../domain/refund/domain/repository/RefundRepository.java | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java index 45cd3120..79ae9381 100644 --- a/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java +++ b/src/main/java/com/irum/come2us/domain/refund/domain/entity/Refund.java @@ -11,7 +11,6 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; - import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.SQLRestriction; import org.hibernate.annotations.UuidGenerator; diff --git a/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java index 8903f45d..b8721a3c 100644 --- a/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java +++ b/src/main/java/com/irum/come2us/domain/refund/domain/repository/RefundRepository.java @@ -2,17 +2,18 @@ import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.refund.domain.entity.Refund; +import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; +import java.util.List; import java.util.Optional; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; -import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; -import java.util.List; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface RefundRepository extends JpaRepository { Optional findByOrder(Order order); + List findByRefundStatus(RefundStatus status); // RefundRepository 추후 orderRepository에서 가져오는 것으로 변경 예정 From 70e1ab1f0278bbc96843fa182012c402d1796eef Mon Sep 17 00:00:00 2001 From: hyeonji91 Date: Mon, 27 Oct 2025 13:15:38 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feature=20#182=20:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A1=B0=ED=9A=8C,=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=EC=83=81=ED=83=9C=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/CustomerOrderService.java | 14 +++++++++++--- .../domain/repository/OrderDetailRepository.java | 12 ++++++++++++ .../order/domain/repository/OrderRepository.java | 2 +- .../advice/exception/errorcode/OrderErrorCode.java | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 6da53c1e..9210039a 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -38,20 +38,28 @@ public class CustomerOrderService { @Transactional(readOnly = true) public OrderDetailStatusResponse getOrderDetailStatus(UUID orderDetailId) { + Member member = memberUtil.getCurrentMember(); + OrderDetail orderDetail = orderDetailRepository - .findByOrderDetailId(orderDetailId) + .findByOrderDetailIdWithOrderAndMember(orderDetailId) .orElseThrow( () -> new CommonException(OrderErrorCode.ORDER_DETAIL_NOT_FOUND)); + if (member.equals(orderDetail.getOrder().getMember())) + throw new CommonException(OrderErrorCode.ORDER_FORBIDDEN); + return OrderDetailStatusResponse.from(orderDetail); } @Transactional(readOnly = true) public OrderDetailResponse getOrderDetail(UUID orderId) { + Member member = memberUtil.getCurrentMember(); + + // order 조회 및 member 검증 Order order = orderRepository - .findByOrderId(orderId) + .findByOrderIdAndMember(orderId, member) .orElseThrow(() -> new CommonException(OrderErrorCode.ORDER_NOT_FOUND)); List orderDetailList = orderDetailRepository.findAllByOrder(order); @@ -83,7 +91,7 @@ public CustomerOrderListResponse getOrderList( List orderIdList = headerList.stream().map(CustomerOrderSummaryRow::orderId).toList(); List orderDetailList = orderRepository.fetchOrderDetailListByMember(orderIdList); - log.info("orderDetailList ", orderDetailList); + log.info("orderDetailList {}", orderDetailList); // 4. orderId로 그룹핑 : productSummary 제작 Map> detailMap = diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java index 07692c6f..6a8e2e32 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java @@ -2,10 +2,12 @@ import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import io.lettuce.core.dynamic.annotation.Param; import java.util.List; import java.util.Optional; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository @@ -13,5 +15,15 @@ public interface OrderDetailRepository extends JpaRepository Optional findByOrderDetailId(UUID orderDetailId); + @Query( + """ + select od from OrderDetail od + join fetch od.order o + join fetch o.member m + where od.orderDetailId = :orderDetailId +""") + Optional findByOrderDetailIdWithOrderAndMember( + @Param("orderDetailId") UUID orderDetailId); + List findAllByOrder(Order order); } diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java index 5f4c0087..afc02ef2 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderRepository.java @@ -10,7 +10,7 @@ @Repository public interface OrderRepository extends JpaRepository, OrderRepositoryCustom { - Optional findByOrderId(UUID orderId); + Optional findByOrderIdAndMember(UUID orderId, Member member); List findAllByMember(Member member); } diff --git a/src/main/java/com/irum/come2us/global/presentation/advice/exception/errorcode/OrderErrorCode.java b/src/main/java/com/irum/come2us/global/presentation/advice/exception/errorcode/OrderErrorCode.java index 55f8df71..d29593fe 100644 --- a/src/main/java/com/irum/come2us/global/presentation/advice/exception/errorcode/OrderErrorCode.java +++ b/src/main/java/com/irum/come2us/global/presentation/advice/exception/errorcode/OrderErrorCode.java @@ -8,7 +8,7 @@ @AllArgsConstructor public enum OrderErrorCode implements BaseErrorCode { ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "주문을 찾을 수 없습니다."), - + ORDER_FORBIDDEN(HttpStatus.FORBIDDEN, "해당 주문에 대해 권한이 없습니다"), ORDER_DETAIL_NOT_FOUND(HttpStatus.NOT_FOUND, "주문 상세를 찾을 수 없습니다."), ; From a3af258fca6ff04fae74c22eda868f2ba644f206 Mon Sep 17 00:00:00 2001 From: hyeonji91 Date: Mon, 27 Oct 2025 14:02:27 +0900 Subject: [PATCH 10/11] =?UTF-8?q?style=20$204=20:=20soptless=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CustomerOrderMapper.java | 4 +--- .../service/CustomerOrderService.java | 20 +++++++------------ .../repository/OrderDetailRepository.java | 1 - .../controller/CustomerOrderController.java | 3 +-- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java index a29fc1d3..f5d07114 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java +++ b/src/main/java/com/irum/come2us/domain/order/application/mapper/CustomerOrderMapper.java @@ -6,11 +6,10 @@ import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.refund.domain.entity.Refund; import com.irum.come2us.domain.refund.domain.entity.enums.RefundStatus; -import com.irum.come2us.domain.order.presentation.dto.response.AddressResponse; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderResponse; import java.util.List; import org.springframework.stereotype.Component; @@ -83,7 +82,6 @@ private static CustomerOrderResponse.ProductSummary toProductSummary(OrderDetail .build(); } - public static CustomerOrderListResponse.OrderResponse toOrderResponse( CustomerOrderSummaryRow or, List pList) { diff --git a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java index 657d8721..3ed39772 100644 --- a/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java +++ b/src/main/java/com/irum/come2us/domain/order/application/service/CustomerOrderService.java @@ -8,24 +8,16 @@ import com.irum.come2us.domain.order.application.mapper.CustomerOrderMapper; import com.irum.come2us.domain.order.domain.entity.Order; import com.irum.come2us.domain.order.domain.entity.OrderDetail; +import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; import com.irum.come2us.domain.order.domain.repository.OrderRepository; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderDetailRow; import com.irum.come2us.domain.order.infrastructure.repository.dto.CustomerOrderSummaryRow; +import com.irum.come2us.domain.order.presentation.dto.request.CustomerOrderRequest; import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderListResponse; +import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; -import com.irum.come2us.domain.refund.domain.entity.Refund; -import com.irum.come2us.domain.refund.domain.repository.RefundRepository; -import com.irum.come2us.global.presentation.advice.exception.CommonException; -import com.irum.come2us.global.presentation.advice.exception.errorcode.OrderErrorCode; -import com.irum.come2us.global.util.MemberUtil; -import java.time.LocalDate; -import com.irum.come2us.domain.order.domain.entity.enums.OrderStatus; -import com.irum.come2us.domain.order.domain.repository.OrderDetailRepository; -import com.irum.come2us.domain.order.domain.repository.OrderRepository; -import com.irum.come2us.domain.order.presentation.dto.request.CustomerOrderRequest; -import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderResponse; import com.irum.come2us.domain.payment.application.service.PaymentService; import com.irum.come2us.domain.payment.domain.entity.Payment; import com.irum.come2us.domain.payment.domain.entity.enums.PaymentCorp; @@ -33,6 +25,8 @@ import com.irum.come2us.domain.product.domain.entity.ProductOptionValue; import com.irum.come2us.domain.product.domain.repository.ProductOptionValueRepository; import com.irum.come2us.domain.product.domain.repository.ProductRepository; +import com.irum.come2us.domain.refund.domain.entity.Refund; +import com.irum.come2us.domain.refund.domain.repository.RefundRepository; import com.irum.come2us.domain.store.domain.entity.Store; import com.irum.come2us.domain.store.domain.repository.StoreRepository; import com.irum.come2us.global.presentation.advice.exception.CommonException; @@ -41,6 +35,7 @@ import com.irum.come2us.global.presentation.advice.exception.errorcode.ProductErrorCode; import com.irum.come2us.global.presentation.advice.exception.errorcode.StoreErrorCode; import com.irum.come2us.global.util.MemberUtil; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -146,7 +141,7 @@ public CustomerOrderListResponse getOrderList( detailMap.getOrDefault( order.orderId(), List.of()) // order detail 없다면 빈 리스트 - )) + )) .toList(); // 6. next cursor계산 @@ -159,7 +154,6 @@ public CustomerOrderListResponse getOrderList( .build(); } - public CustomerOrderResponse prepareOrder(CustomerOrderRequest request) { Member member = memberUtil.getCurrentMember(); Store store = diff --git a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java index 59e30ccf..4dbf2987 100644 --- a/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java +++ b/src/main/java/com/irum/come2us/domain/order/domain/repository/OrderDetailRepository.java @@ -7,7 +7,6 @@ import java.util.Optional; import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java index d97ea711..980fdb3b 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/controller/CustomerOrderController.java @@ -6,10 +6,9 @@ import com.irum.come2us.domain.order.presentation.dto.response.CustomerOrderResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailResponse; import com.irum.come2us.domain.order.presentation.dto.response.OrderDetailStatusResponse; +import jakarta.validation.Valid; import java.time.LocalDate; import java.util.UUID; - -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; From a852233f54bf2b015631852f837b365b46e9b060 Mon Sep 17 00:00:00 2001 From: hyeonji91 Date: Mon, 27 Oct 2025 14:17:38 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix=20#204=20:=20merge=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/dto/response/OrderDetailStatusResponse.java | 2 +- .../com/irum/come2us/domain/payment/domain/entity/Payment.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java index c70e0c7e..e0e42071 100644 --- a/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java +++ b/src/main/java/com/irum/come2us/domain/order/presentation/dto/response/OrderDetailStatusResponse.java @@ -10,7 +10,7 @@ public record OrderDetailStatusResponse( AddressResponse address, String recipientName, OrderStatus orderStatus, - Integer trackingNumber, + String trackingNumber, String deliveryRequest) { public static OrderDetailStatusResponse from(OrderDetail orderDetail) { return new OrderDetailStatusResponse( diff --git a/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java b/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java index d9ebadec..8383cd65 100644 --- a/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java +++ b/src/main/java/com/irum/come2us/domain/payment/domain/entity/Payment.java @@ -14,7 +14,6 @@ import org.hibernate.annotations.UuidGenerator; @Builder -@Getter @AllArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE p_payment SET deleted_at = NOW() WHERE payment_id=?") @SQLRestriction("deleted_at is null")