Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class OrderControllerImpl implements OrderController {
private final OrderGetService orderGetService;
private final OrderCancelService orderCancelService;

// 주문 생성
// 회원 주문 생성
@Override
@PostMapping
public ResponseEntity<OrderResponse> createOrder(@CurrentUser User user,
Expand All @@ -34,16 +34,16 @@ public ResponseEntity<OrderResponse> createOrder(@CurrentUser User user,
return ResponseEntity.ok(orderResponse);
}

//주문 내역 단건 조회
//회원 주문 내역 단건 조회
@Override
@GetMapping("/{orderId}")
public ResponseEntity<OrderDetailPageResponse> 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<Page<OrderResponse>> getOrderList(
Expand All @@ -57,16 +57,16 @@ public ResponseEntity<Page<OrderResponse>> getOrderList(
return ResponseEntity.ok(responseList);
}

//주문 취소
//회원 주문 취소
@Override
@PatchMapping("/{orderId}")
public ResponseEntity<String> 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<OrderResponse> createInstantOrder(@CurrentUser User user, @RequestBody @Valid OrderRequest orderRequest) {
Expand All @@ -75,11 +75,11 @@ public ResponseEntity<OrderResponse> createInstantOrder(@CurrentUser User user,
return ResponseEntity.ok(orderResponse);
}

//회원 주문 취소 상세 페이지
//회원 주문 취소 상세 페이지
@Override
@GetMapping("/getCancel/{orderId}")
public ResponseEntity<OrderCancelResponse> 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);
}
Expand All @@ -91,7 +91,6 @@ public ResponseEntity<CartResponse> getCheckout(@CurrentUser User user, @Request

return ResponseEntity.ok(products);
}

//주문 생성 - 결제 페이지와 연동
// @Override
// @PostMapping
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

Expand Down Expand Up @@ -37,4 +40,8 @@ ResponseEntity<OrderCancelResponse> getGuestOrderCancel(
@Parameter(description = "조회할 주문번호", example = "O250327QNPUY") String orderNumber,
@Parameter(description = "조회할 주문 수신자의 전화번호", example = "01012345678") String phone
);

//비회원 주문서로 넘어가는 API
@Operation(summary = "비회원 장바구니에서 주문서로 넘어갈 때 사용하는 API")
ResponseEntity<CartResponse> getGuestCheckout(List<OrderDetailRequest> orderDetailRequest);
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -12,6 +10,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/ordersGuest")
Expand All @@ -25,7 +25,7 @@ public class OrderGuestControllerImpl implements OrderGuestController {
@Override
@PostMapping
public ResponseEntity<OrderResponse> createGuestOrder(@RequestBody @Valid OrderRequest orderRequest) {
OrderResponse orderResponse = orderCreationService.createOrder(null, orderRequest);
OrderResponse orderResponse = orderCreationService.createOrder(orderRequest);

return ResponseEntity.ok(orderResponse);
}
Expand All @@ -34,7 +34,7 @@ public ResponseEntity<OrderResponse> createGuestOrder(@RequestBody @Valid OrderR
@Override
@PostMapping("/instant")
public ResponseEntity<OrderResponse> createGuestInstantOrder(@RequestBody @Valid OrderRequest orderRequest) {
OrderResponse orderResponse = orderCreationService.createInstantOrder(null, orderRequest);
OrderResponse orderResponse = orderCreationService.createInstantOrder(orderRequest);

return ResponseEntity.ok(orderResponse);
}
Expand All @@ -44,7 +44,7 @@ public ResponseEntity<OrderResponse> createGuestInstantOrder(@RequestBody @Valid
@GetMapping("/{orderNumber}")
public ResponseEntity<OrderDetailPageResponse> 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);
}
Expand All @@ -54,7 +54,7 @@ public ResponseEntity<OrderDetailPageResponse> getGuestOrderDetail(@PathVariable
@PatchMapping("/{orderNumber}")
public ResponseEntity<String> cancelGuestOrder(@PathVariable String orderNumber,
@RequestParam String phone) {
orderCancelService.cancelOrder(null, null, orderNumber, phone);
orderCancelService.cancelOrder(orderNumber, phone);

return ResponseEntity.ok("주문이 취소되었습니다.");
}
Expand All @@ -63,8 +63,16 @@ public ResponseEntity<String> cancelGuestOrder(@PathVariable String orderNumber,
@Override
@GetMapping("/getCancel/{orderNumber}")
public ResponseEntity<OrderCancelResponse> 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<CartResponse> getGuestCheckout(@RequestBody List<OrderDetailRequest> orderDetailRequest) {
CartResponse products = orderGetService.getCheckout(orderDetailRequest);
return ResponseEntity.ok(products);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<OrderResponse> getPaginatedOrders(User user, String period, int page, int size);
//회원 장바구니에서 주문서로 넘어가는 API
CartResponse getCheckout(User user, List<OrderDetailRequest> 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> orderDetailRequest);

//회원 비회원 장바구니에서 주문서로 넘어가는 API
CartResponse getCheckout(User user, List<OrderDetailRequest> orderDetailRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

public interface OrderUtilService {

Order findOrder(User user, Long orderId, String orderNumber, String phone);
String generateOrderNumber();
List<OrderDetail> processOrderDetails(Order order, List<OrderDetailRequest> orderDetailRequestList);
List<OrderProductResponse> convertToOrderDetailResponses(List<OrderDetail> details, User user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 보니 이렇게 user에 null이 있으면
guest라는 처리를 해주는 것도 좋겠네요!

}

//비회원 바로 주문 생성
@Override
@Transactional
public OrderResponse createInstantOrder(OrderRequest orderRequest) {
return createInstantOrder(null, orderRequest);
}

// 회원 주문 생성
@Override
@Transactional
public OrderResponse createOrder(User user, OrderRequest orderRequest) {
Expand All @@ -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();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OrderRequest 와 많이 엮여 있습니다.
orderDetailRequestList() → get(0) → saleProductId()
한번 개선해 보는게 좋을 것 같아요


return distributedLockService.executeWithLock(lockKey, () -> processOrderCreation(user, instantOrderRequest));
}

public OrderResponse processOrderCreation(User user, OrderRequest orderRequest) {
// 주소 저장 (회원인 경우만)
if (user != null) {
Expand Down Expand Up @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<OrderDetailRequest> 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<OrderResponse> getPaginatedOrders(User user, String period, int page, int size) {
LocalDateTime today = LocalDateTime.now();
Expand Down Expand Up @@ -71,17 +98,18 @@ public Page<OrderResponse> 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> orderDetailRequest) {
List<Long> saleProductIds = orderDetailRequest.stream()
Expand Down
Loading