diff --git a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderControllerImpl.java b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderControllerImpl.java index dbaccaae..d3e652cd 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderControllerImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderControllerImpl.java @@ -24,7 +24,7 @@ public class OrderControllerImpl implements OrderController { private final OrderGetService orderGetService; private final OrderCancelService orderCancelService; - // 주문 생성 + // 회원 주문 생성 @Override @PostMapping public ResponseEntity createOrder(@CurrentUser User user, @@ -34,16 +34,16 @@ public ResponseEntity createOrder(@CurrentUser User user, return ResponseEntity.ok(orderResponse); } - //주문 내역 단건 조회 + //회원 주문 내역 단건 조회 @Override @GetMapping("/{orderId}") public ResponseEntity getOrder(@CurrentUser User user, @PathVariable Long orderId){ - OrderDetailPageResponse orderDetailResponse = orderGetService.getOrder(user, orderId, null, null); + OrderDetailPageResponse orderDetailResponse = orderGetService.getOrder(user, orderId); return ResponseEntity.ok(orderDetailResponse); } - //주문 전체 조회 (페이징 처리) + //회원 주문 전체 조회 (페이징 처리) @Override @GetMapping public ResponseEntity> getOrderList( @@ -57,16 +57,16 @@ public ResponseEntity> getOrderList( return ResponseEntity.ok(responseList); } - //주문 취소 + //회원 주문 취소 @Override @PatchMapping("/{orderId}") public ResponseEntity cancelOrder(@CurrentUser User user, @PathVariable Long orderId){ - orderCancelService.cancelOrder(user, orderId, null, null); + orderCancelService.cancelOrder(user, orderId); return ResponseEntity.ok("주문이 취소되었습니다"); } - // 바로 구매하기 + // 회원 바로 구매하기 @Override @PostMapping("/instant") public ResponseEntity createInstantOrder(@CurrentUser User user, @RequestBody @Valid OrderRequest orderRequest) { @@ -75,11 +75,11 @@ public ResponseEntity createInstantOrder(@CurrentUser User user, return ResponseEntity.ok(orderResponse); } - //회원 주문 취소 상세 페이지 + //회원 주문 취소 상세 페이지 @Override @GetMapping("/getCancel/{orderId}") public ResponseEntity getOrderCancel(@CurrentUser User user, @PathVariable Long orderId) { - OrderCancelResponse orderCancelResponse = orderGetService.getCancelPage(user, orderId, null, null); + OrderCancelResponse orderCancelResponse = orderGetService.getCancelPage(user, orderId); return ResponseEntity.ok(orderCancelResponse); } @@ -91,7 +91,6 @@ public ResponseEntity getCheckout(@CurrentUser User user, @Request return ResponseEntity.ok(products); } - //주문 생성 - 결제 페이지와 연동 // @Override // @PostMapping diff --git a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestController.java b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestController.java index ab36b834..17d0416e 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestController.java +++ b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestController.java @@ -1,11 +1,14 @@ package com.jishop.order.controller; +import com.jishop.cart.dto.CartResponse; import com.jishop.order.dto.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; +import java.util.List; + @Tag(name = "비회원 주문 API") public interface OrderGuestController { @@ -37,4 +40,8 @@ ResponseEntity getGuestOrderCancel( @Parameter(description = "조회할 주문번호", example = "O250327QNPUY") String orderNumber, @Parameter(description = "조회할 주문 수신자의 전화번호", example = "01012345678") String phone ); + + //비회원 주문서로 넘어가는 API + @Operation(summary = "비회원 장바구니에서 주문서로 넘어갈 때 사용하는 API") + ResponseEntity getGuestCheckout(List orderDetailRequest); } diff --git a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestControllerImpl.java b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestControllerImpl.java index 3b658cfb..e9ba03bc 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestControllerImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/controller/OrderGuestControllerImpl.java @@ -1,9 +1,7 @@ package com.jishop.order.controller; -import com.jishop.order.dto.OrderCancelResponse; -import com.jishop.order.dto.OrderDetailPageResponse; -import com.jishop.order.dto.OrderRequest; -import com.jishop.order.dto.OrderResponse; +import com.jishop.cart.dto.CartResponse; +import com.jishop.order.dto.*; import com.jishop.order.service.OrderCancelService; import com.jishop.order.service.OrderCreationService; import com.jishop.order.service.OrderGetService; @@ -12,6 +10,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/ordersGuest") @@ -25,7 +25,7 @@ public class OrderGuestControllerImpl implements OrderGuestController { @Override @PostMapping public ResponseEntity createGuestOrder(@RequestBody @Valid OrderRequest orderRequest) { - OrderResponse orderResponse = orderCreationService.createOrder(null, orderRequest); + OrderResponse orderResponse = orderCreationService.createOrder(orderRequest); return ResponseEntity.ok(orderResponse); } @@ -34,7 +34,7 @@ public ResponseEntity createGuestOrder(@RequestBody @Valid OrderR @Override @PostMapping("/instant") public ResponseEntity createGuestInstantOrder(@RequestBody @Valid OrderRequest orderRequest) { - OrderResponse orderResponse = orderCreationService.createInstantOrder(null, orderRequest); + OrderResponse orderResponse = orderCreationService.createInstantOrder(orderRequest); return ResponseEntity.ok(orderResponse); } @@ -44,7 +44,7 @@ public ResponseEntity createGuestInstantOrder(@RequestBody @Valid @GetMapping("/{orderNumber}") public ResponseEntity getGuestOrderDetail(@PathVariable String orderNumber, @RequestParam String phone) { - OrderDetailPageResponse orderDetailList = orderGetService.getOrder(null, null, orderNumber, phone); + OrderDetailPageResponse orderDetailList = orderGetService.getOrder(orderNumber, phone); return ResponseEntity.ok(orderDetailList); } @@ -54,7 +54,7 @@ public ResponseEntity getGuestOrderDetail(@PathVariable @PatchMapping("/{orderNumber}") public ResponseEntity cancelGuestOrder(@PathVariable String orderNumber, @RequestParam String phone) { - orderCancelService.cancelOrder(null, null, orderNumber, phone); + orderCancelService.cancelOrder(orderNumber, phone); return ResponseEntity.ok("주문이 취소되었습니다."); } @@ -63,8 +63,16 @@ public ResponseEntity cancelGuestOrder(@PathVariable String orderNumber, @Override @GetMapping("/getCancel/{orderNumber}") public ResponseEntity getGuestOrderCancel(@PathVariable String orderNumber, @RequestParam String phone){ - OrderCancelResponse orderCancelResponse = orderGetService.getCancelPage(null,null, orderNumber, phone); + OrderCancelResponse orderCancelResponse = orderGetService.getCancelPage(orderNumber, phone); return ResponseEntity.ok(orderCancelResponse); } + + //비회원 주문서로 넘어가는 API + @Override + @PostMapping("/checkout") + public ResponseEntity getGuestCheckout(@RequestBody List orderDetailRequest) { + CartResponse products = orderGetService.getCheckout(orderDetailRequest); + return ResponseEntity.ok(products); + } } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/OrderCancelService.java b/backend/JiShop/src/main/java/com/jishop/order/service/OrderCancelService.java index a597194e..f2e2ce98 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/OrderCancelService.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/OrderCancelService.java @@ -3,6 +3,9 @@ import com.jishop.member.domain.User; public interface OrderCancelService { - //회원 비회원 주문 취소 - void cancelOrder(User user, Long orderId, String orderNumber, String phone); + //회원 주문 취소 + void cancelOrder(User user, Long orderId); + + //비회원 주문 취소 + void cancelOrder(String orderNumber, String phone); } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/OrderCreationService.java b/backend/JiShop/src/main/java/com/jishop/order/service/OrderCreationService.java index 22b86553..48b3ddbb 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/OrderCreationService.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/OrderCreationService.java @@ -5,9 +5,13 @@ import com.jishop.order.dto.OrderResponse; public interface OrderCreationService { - //회원 비회원 주문 생성 + //회원 주문 생성 OrderResponse createOrder(User user, OrderRequest orderRequest); - - //회원 비회원 바로주문 + //회원 바로주문 OrderResponse createInstantOrder(User user, OrderRequest orderRequest); + + //비회원 주문 생성 + OrderResponse createOrder(OrderRequest orderRequest); + //비회원 바로주문 + OrderResponse createInstantOrder(OrderRequest orderRequest); } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/OrderGetService.java b/backend/JiShop/src/main/java/com/jishop/order/service/OrderGetService.java index e384138f..5211ca83 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/OrderGetService.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/OrderGetService.java @@ -11,15 +11,20 @@ import java.util.List; public interface OrderGetService { - //회원 비회원 주문 상세 페이지 - OrderDetailPageResponse getOrder(User user, Long orderId, String orderNumber, String phone); - - //페이징 처리 주문 목록 전체 조회 + //회원 주문 상세 페이지 + OrderDetailPageResponse getOrder(User user, Long orderId); + //회원 주문 취소 상세 페이지 + OrderCancelResponse getCancelPage(User user, Long orderId); + //회원 페이징 처리 주문 목록 전체 조회 Page getPaginatedOrders(User user, String period, int page, int size); + //회원 장바구니에서 주문서로 넘어가는 API + CartResponse getCheckout(User user, List orderDetailRequest); - //회원 비회원 주문취소 상세 페이지 - OrderCancelResponse getCancelPage(User user, Long orderId, String orderNumber, String phone); + //비회원 주문 상세 페이지 + OrderDetailPageResponse getOrder(String orderNumber, String phone); + //비회원 주문 취소 상세 페이지 + OrderCancelResponse getCancelPage(String orderNumber, String phone); + //비회원 장바구니에서 주문서로 넘어가는 API + CartResponse getCheckout(List orderDetailRequest); - //회원 비회원 장바구니에서 주문서로 넘어가는 API - CartResponse getCheckout(User user, List orderDetailRequest); } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/OrderUtilService.java b/backend/JiShop/src/main/java/com/jishop/order/service/OrderUtilService.java index 35f3fefd..42125787 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/OrderUtilService.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/OrderUtilService.java @@ -10,7 +10,6 @@ public interface OrderUtilService { - Order findOrder(User user, Long orderId, String orderNumber, String phone); String generateOrderNumber(); List processOrderDetails(Order order, List orderDetailRequestList); List convertToOrderDetailResponses(List details, User user); diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCancelServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCancelServiceImpl.java index 26c1cd39..548dd3e5 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCancelServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCancelServiceImpl.java @@ -24,11 +24,22 @@ public class OrderCancelServiceImpl implements OrderCancelService { private final StockService stockService; private final OrderUtilService orderUtilService; + private final OrderRepository orderRepository; - // 주문 취소 - (회원/비회원 통합) + //비회원 주문 취소 @Override - public void cancelOrder(User user, Long orderId, String orderNumber, String phone) { - Order order = orderUtilService.findOrder(user, orderId, orderNumber, phone); + public void cancelOrder(String orderNumber, String phone) { + Order order = orderRepository.findByOrderNumberAndPhone(orderNumber, phone) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); + + processCancellation(order); + } + + // 회원 주문 취소 + @Override + public void cancelOrder(User user, Long orderId) { + Order order = orderRepository.findByIdWithDetailsAndProducts(user.getId(), orderId) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); processCancellation(order); } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCreationServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCreationServiceImpl.java index 093bd259..2ea29804 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCreationServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderCreationServiceImpl.java @@ -30,7 +30,21 @@ public class OrderCreationServiceImpl implements OrderCreationService { private final DistributedLockService distributedLockService; private final CartRepository cartRepository; - // 주문 생성 - 통합 + //비회원 주문 생성 + @Override + @Transactional + public OrderResponse createOrder(OrderRequest orderRequest) { + return createOrder(null, orderRequest); + } + + //비회원 바로 주문 생성 + @Override + @Transactional + public OrderResponse createInstantOrder(OrderRequest orderRequest) { + return createInstantOrder(null, orderRequest); + } + + // 회원 주문 생성 @Override @Transactional public OrderResponse createOrder(User user, OrderRequest orderRequest) { @@ -46,6 +60,16 @@ public OrderResponse createOrder(User user, OrderRequest orderRequest) { return distributedLockService.executeWithLock(lockKey, () -> processOrderCreation(user, orderRequest)); } + // 회원 바로 주문 + @Override + @Transactional + public OrderResponse createInstantOrder(User user, OrderRequest instantOrderRequest) { + //락키 생성 (상품 ID를 기반으로) + String lockKey = "order:instant:" + instantOrderRequest.orderDetailRequestList().get(0).saleProductId(); + + return distributedLockService.executeWithLock(lockKey, () -> processOrderCreation(user, instantOrderRequest)); + } + public OrderResponse processOrderCreation(User user, OrderRequest orderRequest) { // 주소 저장 (회원인 경우만) if (user != null) { @@ -92,13 +116,5 @@ public OrderResponse processOrderCreation(User user, OrderRequest orderRequest) return OrderResponse.fromOrder(order, orderProductResponses); } - // 바로 주문하기 (회원/비회원 통합) - @Override - @Transactional - public OrderResponse createInstantOrder(User user, OrderRequest instantOrderRequest) { - //락키 생성 (상품 ID를 기반으로) - String lockKey = "order:instant:" + instantOrderRequest.orderDetailRequestList().get(0).saleProductId(); - return distributedLockService.executeWithLock(lockKey, () -> processOrderCreation(user, instantOrderRequest)); - } } diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderGetServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderGetServiceImpl.java index a61297cd..c9470caf 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderGetServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderGetServiceImpl.java @@ -35,15 +35,42 @@ public class OrderGetServiceImpl implements OrderGetService { private final OrderUtilService orderUtilService; private final SaleProductRepository saleProductRepository; - // 주문 상세 조회 (회원/비회원 통합) + //비회원 주문 상세 조회 @Override - public OrderDetailPageResponse getOrder(User user, Long orderId, String orderNumber, String phone) { - Order order = orderUtilService.findOrder(user, orderId, orderNumber, phone); + public OrderDetailPageResponse getOrder(String orderNumber, String phone){ + Order order = orderRepository.findByOrderNumberAndPhone(orderNumber,phone) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); + + return createOrderDetailPageResponse(order, null); + } + + //비회원 주문 취소 상세 조회 + @Override + public OrderCancelResponse getCancelPage(String orderNumber, String phone){ + Order order = orderRepository.findByOrderNumberAndPhone(orderNumber,phone) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); + + OrderDetailPageResponse page = createOrderDetailPageResponse(order, null); + + return new OrderCancelResponse(order.getUpdatedAt(), page); + } + + //비회원 주문서로 넘어가는 API + @Override + public CartResponse getCheckout(List orderDetailRequests){ + return getCheckout(null, orderDetailRequests); + } + + // 회원 주문 상세 조회 + @Override + public OrderDetailPageResponse getOrder(User user, Long orderId) { + Order order = orderRepository.findByIdWithDetailsAndProducts(user.getId(), orderId) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); return createOrderDetailPageResponse(order, user); } - // 주문 전체 조회 페이징 처리 + // 회원 주문 전체 조회 페이징 처리 @Override public Page getPaginatedOrders(User user, String period, int page, int size) { LocalDateTime today = LocalDateTime.now(); @@ -71,17 +98,18 @@ public Page getPaginatedOrders(User user, String period, int page return new PageImpl<>(orderResponses, pageable, orderIdsPage.getTotalElements()); } - // 회원,비회원 주문 취소 상세 페이지 + // 회원 주문 취소 상세 페이지 @Override - public OrderCancelResponse getCancelPage(User user, Long orderId, String orderNumber, String phone) { - Order order = orderUtilService.findOrder(user, orderId, orderNumber, phone); + public OrderCancelResponse getCancelPage(User user, Long orderId) { + Order order = orderRepository.findByIdWithDetailsAndProducts(user.getId(), orderId) + .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); OrderDetailPageResponse pageResponse = createOrderDetailPageResponse(order, user); return new OrderCancelResponse(order.getUpdatedAt(), pageResponse); } - //회원, 비회원 장바구니에서 주문서로 넘어가는 API + //회원 주문서로 넘어가는 API @Override public CartResponse getCheckout(User user, List orderDetailRequest) { List saleProductIds = orderDetailRequest.stream() diff --git a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderUtilServiceImpl.java b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderUtilServiceImpl.java index 8784028d..81e91b51 100644 --- a/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderUtilServiceImpl.java +++ b/backend/JiShop/src/main/java/com/jishop/order/service/impl/OrderUtilServiceImpl.java @@ -31,17 +31,6 @@ public class OrderUtilServiceImpl implements OrderUtilService { private final StockService stockService; private final ReviewRepository reviewRepository; - // 주문 조회 공통 로직 - public Order findOrder(User user, Long orderId, String orderNumber, String phone) { - if (user != null) { - return orderRepository.findByIdWithDetailsAndProducts(user.getId(), orderId) - .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); - } else { - return orderRepository.findByOrderNumberAndPhone(orderNumber, phone) - .orElseThrow(() -> new DomainException(ErrorType.ORDER_NOT_FOUND)); - } - } - // 주문 번호 생성 public String generateOrderNumber() { String orderTypeCode = "O"; // Order diff --git a/backend/JiShop/src/main/resources/config b/backend/JiShop/src/main/resources/config index 4cfe2636..04f54a4a 160000 --- a/backend/JiShop/src/main/resources/config +++ b/backend/JiShop/src/main/resources/config @@ -1 +1 @@ -Subproject commit 4cfe2636a840bcba5c09dd7a116229acfc7d421d +Subproject commit 04f54a4aa1734aeeab6c21bb705b1568e2c39788