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 @@ -6,27 +6,18 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;


import java.io.IOException;
import java.util.List;

@Tag(name = "주문 API", description = "주문 관련 API")
public interface OrderController {

//회원 주문 - 결제와 연동
@Operation(
summary = "회원 주문 및 결제 API",
description = "회원이 장바구니에서 주문 및 결제 시 사용하는 API"
)
void createOrder(User user, OrderRequest orderRequest, HttpServletResponse response) throws IOException;

//회원 주문
// @Operation(summary = "회원 주문", description = "회원이 장바구니에서 주문 시 사용하는 API")
// ResponseEntity<OrderResponse> createOrder(User user, OrderRequest orderRequest);
@Operation(summary = "회원 주문", description = "회원이 장바구니에서 주문 시 사용하는 API")
ResponseEntity<OrderResponse> createOrder(User user, OrderRequest orderRequest);

//회원 바로주문
@Operation(summary = "회원 바로 주문", description = "회원이 상품 상세 페이지에서 바로 주문할 때 사용되는 API")
Expand All @@ -41,35 +32,26 @@ ResponseEntity<Page<OrderResponse>> getOrderList(
@Parameter(description = "각 페이지에 가져올 데이터의 개수를 정하는 값", example = "10") int size
);

//회원 주문 상세 조회 - 결제와 연동
@Operation(
summary = "회원 주문 상세 조회",
description = "주문 및 결제 완료 후 orderNumber로 조회 가능")
//회원 주문 상세 조회
@Operation(summary = "회원 주문 상세 조회", description = "orderId로 조회 가능")
ResponseEntity<OrderDetailPageResponse> getOrder(
User user,
@Parameter(description = "조회할 주문 ID", example = "O250401T6P0C") String orderNumber
@Parameter(description = "조회할 주문 ID", example = "1") Long orderId
);

// //회원 주문 상세 조회
// @Operation(summary = "회원 주문 상세 조회", description = "orderId로 조회 가능")
// ResponseEntity<OrderDetailPageResponse> getOrder(
// User user,
// @Parameter(description = "조회할 주문 ID", example = "1") Long orderId
// );

//회원 주문 취소
// @Operation(summary = "회원 주문 취소", description = "orderId로 주문 취소 가능")
// ResponseEntity<String> cancelOrder(
// User user,
// @Parameter(description = "조회할 주문 ID", example = "1") Long orderId
// );
@Operation(summary = "회원 주문 취소", description = "orderId로 주문 취소 가능")
ResponseEntity<String> cancelOrder(
User user,
@Parameter(description = "조회할 주문 ID", example = "1") Long orderId
);

//회원 취소 상세페이지
// @Operation(summary = "회원 취소 상세 페이지", description = "orderId로 취소 상세 페이지 조회 가능")
// ResponseEntity<OrderCancelResponse> getOrderCancel(
// User user,
// @Parameter(description = "조회할 주문 ID", example = "1") Long orderId
// );
@Operation(summary = "회원 취소 상세 페이지", description = "orderId로 취소 상세 페이지 조회 가능")
ResponseEntity<OrderCancelResponse> getOrderCancel(
User user,
@Parameter(description = "조회할 주문 ID", example = "1") Long orderId
);

// 장바구니에서 주문서로 넘어가는 API
@Operation(summary = "장바구니에서 주문서로 넘어갈 때 사용하는 API")
Expand All @@ -78,4 +60,20 @@ ResponseEntity<OrderDetailPageResponse> getOrder(
//바로 주문하기에서 주문서로 넘어가는 API
@Operation(summary = "바로 주문하기에서 주문서로 넘어갈 때 사용하는 API")
ResponseEntity<CartResponse> getCheckoutInstant(User user, Long saleProductId, int quantity);

//회원 주문 - 결제와 연동
// @Operation(
// summary = "회원 주문 및 결제 API",
// description = "회원이 장바구니에서 주문 및 결제 시 사용하는 API"
// )
// void createOrder(User user, OrderRequest orderRequest, HttpServletResponse response) throws IOException;

//회원 주문 상세 조회 - 결제와 연동
// @Operation(
// summary = "회원 주문 상세 조회",
// description = "주문 및 결제 완료 후 orderNumber로 조회 가능")
// ResponseEntity<OrderDetailPageResponse> getOrder(
// User user,
// @Parameter(description = "조회할 주문 ID", example = "O250401T6P0C") String orderNumber
// );
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,44 +22,24 @@ public class OrderControllerImpl implements OrderController {

private final OrderService orderService;

//주문 생성 - 결제 페이지와 연동
// 주문 생성
@Override
@PostMapping
public void createOrder(@CurrentUser User user,
@RequestBody @Valid OrderRequest orderRequest,
HttpServletResponse response) throws IOException {
public ResponseEntity<OrderResponse> createOrder(@CurrentUser User user,
@Valid @RequestBody OrderRequest orderRequest) {
OrderResponse orderResponse = orderService.createOrder(user, orderRequest);
response.sendRedirect("/orders/checkout/view?orderNumber="
+ orderResponse.orderNumber()
+ "&amount=" + orderResponse.totalPrice());
}

// @Override
// @PostMapping
// public ResponseEntity<OrderResponse> createOrder(@CurrentUser User user,
// @Valid @RequestBody OrderRequest orderRequest) {
// OrderResponse orderResponse = orderService.createOrder(user, orderRequest);
//
// return ResponseEntity.ok(orderResponse);
// }

//주문 내역 단건 조회 - 결제 페이지와 연동
return ResponseEntity.ok(orderResponse);
}

//주문 내역 단건 조회
@Override
@GetMapping("/{orderNumber}")
public ResponseEntity<OrderDetailPageResponse> getOrder(@CurrentUser User user, @PathVariable String orderNumber){
OrderDetailPageResponse orderDetailResponse = orderService.getOrder(user, orderNumber, null);
@GetMapping("/{orderId}")
public ResponseEntity<OrderDetailPageResponse> getOrder(@CurrentUser User user, @PathVariable Long orderId){
OrderDetailPageResponse orderDetailResponse = orderService.getOrder(user, orderId, null, null);

return ResponseEntity.ok(orderDetailResponse);
}

// //주문 내역 단건 조회
// @Override
// @GetMapping("/{orderId}")
// public ResponseEntity<OrderDetailPageResponse> getOrder(@CurrentUser User user, @PathVariable Long orderId){
// OrderDetailPageResponse orderDetailResponse = orderService.getOrder(user, orderId, null, null);
//
// return ResponseEntity.ok(orderDetailResponse);
// }

//주문 전체 조회 (페이징 처리)
@Override
Expand All @@ -76,13 +56,13 @@ public ResponseEntity<Page<OrderResponse>> getOrderList(
}

//주문 취소
// @Override
// @PatchMapping("/{orderId}")
// public ResponseEntity<String> cancelOrder(@CurrentUser User user, @PathVariable Long orderId){
// orderService.cancelOrder(user, orderId, null, null);
//
// return ResponseEntity.ok("주문이 취소되었습니다");
// }
@Override
@PatchMapping("/{orderId}")
public ResponseEntity<String> cancelOrder(@CurrentUser User user, @PathVariable Long orderId){
orderService.cancelOrder(user, orderId, null, null);

return ResponseEntity.ok("주문이 취소되었습니다");
}

// 바로 구매하기
@Override
Expand All @@ -94,13 +74,13 @@ public ResponseEntity<OrderResponse> createInstantOrder(@CurrentUser User user,
}

//회원 주문 취소 상세 페이지
// @Override
// @GetMapping("/getCancel/{orderId}")
// public ResponseEntity<OrderCancelResponse> getOrderCancel(@CurrentUser User user, @PathVariable Long orderId) {
// OrderCancelResponse orderCancelResponse = orderService.getCancelPage(user, orderId, null, null);
//
// return ResponseEntity.ok(orderCancelResponse);
// }
@Override
@GetMapping("/getCancel/{orderId}")
public ResponseEntity<OrderCancelResponse> getOrderCancel(@CurrentUser User user, @PathVariable Long orderId) {
OrderCancelResponse orderCancelResponse = orderService.getCancelPage(user, orderId, null, null);

return ResponseEntity.ok(orderCancelResponse);
}

//장바구니에서 주문서로 넘어갈 때 사용하는 API
@PostMapping("/checkout")
Expand All @@ -120,4 +100,25 @@ public ResponseEntity<CartResponse> getCheckoutInstant(@CurrentUser User user,

return ResponseEntity.ok(products);
}

//주문 생성 - 결제 페이지와 연동
// @Override
// @PostMapping
// public void createOrder(@CurrentUser User user,
// @RequestBody @Valid OrderRequest orderRequest,
// HttpServletResponse response) throws IOException {
// OrderResponse orderResponse = orderService.createOrder(user, orderRequest);
// response.sendRedirect("/orders/checkout/view?orderNumber="
// + orderResponse.orderNumber()
// + "&amount=" + orderResponse.totalPrice());
// }

//주문 내역 단건 조회 - 결제 페이지와 연동
// @Override
// @GetMapping("/{orderNumber}")
// public ResponseEntity<OrderDetailPageResponse> getOrder(@CurrentUser User user, @PathVariable String orderNumber){
// OrderDetailPageResponse orderDetailResponse = orderService.getOrder(user, orderNumber, null);
//
// return ResponseEntity.ok(orderDetailResponse);
// }
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.jishop.order.controller;

import io.swagger.v3.oas.annotations.Operation;
import org.springframework.ui.Model;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "결제 페이지 렌더링 API")
public interface OrderViewController {

@Operation(
summary = "결제 페이지 렌더링 API",
description = "회원이 장바구니에서 주문 시 결제 페이지를 렌더링하는 API"
)
String createOrderAndRedirect(String orderNumber, int amount, Model model);
}
//package com.jishop.order.controller;
//
//import io.swagger.v3.oas.annotations.Operation;
//import org.springframework.ui.Model;
//import io.swagger.v3.oas.annotations.tags.Tag;
//
//@Tag(name = "결제 페이지 렌더링 API")
//public interface OrderViewController {
//
// @Operation(
// summary = "결제 페이지 렌더링 API",
// description = "회원이 장바구니에서 주문 시 결제 페이지를 렌더링하는 API"
// )
// String createOrderAndRedirect(String orderNumber, int amount, Model model);
//}
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
package com.jishop.order.controller;

import com.jishop.config.TossPaymentConfig;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.ui.Model;

@Controller
@RequiredArgsConstructor
@RequestMapping("/orders")
public class OrderViewControllerImpl implements OrderViewController {

private final TossPaymentConfig tossPaymentConfig;

//package com.jishop.order.controller;
//
//import com.jishop.config.TossPaymentConfig;
//import lombok.RequiredArgsConstructor;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.ui.Model;
//
//@Controller
//@RequiredArgsConstructor
//@RequestMapping("/orders")
//public class OrderViewControllerImpl implements OrderViewController {
//
// private final TossPaymentConfig tossPaymentConfig;
//
// @GetMapping("/test")
// public String test() {
// return "test-order";
// }

@GetMapping("/checkout/view")
public String createOrderAndRedirect(@RequestParam String orderNumber,
@RequestParam int amount,
Model model) {
// 결제 페이지에 필요한 데이터 전달
model.addAttribute("orderId", orderNumber); // Toss 결제용
model.addAttribute("amount", amount);
model.addAttribute("clientKey", tossPaymentConfig.getClientKey());
model.addAttribute("successUrl", "/payments/success");
model.addAttribute("failUrl", "/payments/fail");

return "checkout"; // templates/checkout.html
}
}

//
// @GetMapping("/checkout/view")
// public String createOrderAndRedirect(@RequestParam String orderNumber,
// @RequestParam int amount,
// Model model) {
// // 결제 페이지에 필요한 데이터 전달
// model.addAttribute("orderId", orderNumber); // Toss 결제용
// model.addAttribute("amount", amount);
// model.addAttribute("clientKey", tossPaymentConfig.getClientKey());
// model.addAttribute("successUrl", "/payments/success");
// model.addAttribute("failUrl", "/payments/fail");
//
// return "checkout"; // templates/checkout.html
// }
//}
//
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,19 @@
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
// 특정 사용자의 단일 주문 조회 (fetch join 적용)
// @Query("SELECT DISTINCT o FROM Order o " +
// "LEFT JOIN FETCH o.orderDetails od " +
// "WHERE o.id = :orderId AND o.userId = :userId")
// Optional<Order> findByIdWithDetails(@Param("userId") Long userId, @Param("orderId") Long orderId);
@Query("SELECT DISTINCT o FROM Order o " +
"LEFT JOIN FETCH o.orderDetails od " +
"WHERE o.orderNumber = :orderNumber AND o.userId = :userId")
Optional<Order> findByIdWithDetails(@Param("userId") Long userId, @Param("orderNumber") Long orderNumber);
"WHERE o.id = :orderId AND o.userId = :userId")
Optional<Order> findByIdWithDetails(@Param("userId") Long userId, @Param("orderId") Long orderId);

// @Query("SELECT DISTINCT o FROM Order o " +
// "LEFT JOIN FETCH o.orderDetails od " +
// "LEFT JOIN FETCH od.saleProduct sp " +
// "LEFT JOIN FETCH sp.option " +
// "LEFT JOIN FETCH sp.product " +
// "LEFT JOIN FETCH sp.stock " +
// "WHERE o.orderId = :orderId AND o.userId = :userId")
// Optional<Order> findByIdWithDetailsAndProducts(@Param("userId") Long userId, @Param("orderId") Long orderNumber);
@Query("SELECT DISTINCT o FROM Order o " +
"LEFT JOIN FETCH o.orderDetails od " +
"LEFT JOIN FETCH od.saleProduct sp " +
"LEFT JOIN FETCH sp.option " +
"LEFT JOIN FETCH sp.product " +
"LEFT JOIN FETCH sp.stock " +
"WHERE o.orderNumber = :orderNumber AND o.userId = :userId")
Optional<Order> findByIdWithDetailsAndProducts(@Param("userId") Long userId, @Param("orderNumber") String orderNumber);
"WHERE o.id = :orderId AND o.userId = :userId")
Optional<Order> findByIdWithDetailsAndProducts(@Param("userId") Long userId, @Param("orderId") Long orderNumber);

// 페이징을 위한 첫 번째 쿼리: 페이징된 ID 목록 가져오기
@Query("SELECT o.id FROM Order o " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@

public interface OrderCancelService {
//회원 비회원 주문 취소
// void cancelOrder(User user, Long orderId, String orderNumber, String phone);
void cancelOrder(User user, Long orderId, String orderNumber, String phone);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@

public interface OrderGetService {
//회원 비회원 주문 상세 페이지
// OrderDetailPageResponse getOrder(User user, Long orderId, String orderNumber, String phone);
OrderDetailPageResponse getOrder(User user, String orderNumber, String phone);
OrderDetailPageResponse getOrder(User user, Long orderId, String orderNumber, String phone);

//페이징 처리 주문 목록 전체 조회
Page<OrderResponse> getPaginatedOrders(User user, String period, int page, int size);

//회원 비회원 주문취소 상세 페이지
// OrderCancelResponse getCancelPage(User user, Long orderId, String orderNumber, String phone);
OrderCancelResponse getCancelPage(User user, Long orderId, String orderNumber, String phone);

//회원 비회원 장바구니에서 주문서로 넘어가는 API
CartResponse getCheckOut(User user, List<OrderDetailRequest> orderDetailRequest);
Expand Down
Loading