Skip to content

Commit

Permalink
feat: order detail api
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeongh00 committed Aug 1, 2024
1 parent 9e7a5ec commit 51f34fe
Show file tree
Hide file tree
Showing 8 changed files with 151 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.likelion.apimodule.order.application;

import com.likelion.apimodule.order.dto.MenuOrder;
import com.likelion.apimodule.order.dto.OrderDetail;
import com.likelion.apimodule.order.dto.OrderInfo;
import com.likelion.apimodule.security.util.JwtUtil;
import com.likelion.coremodule.VisitList.repository.VisitListRepository;
Expand All @@ -17,7 +19,10 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.security.SecureRandom;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -35,6 +40,10 @@ public class OrderFindUseCase {
private final MarketQueryService marketQueryService;
private final VisitListRepository visitListRepository;

private static final DateTimeFormatter ORDER_NUMBER_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
private static final int ORDER_NUMBER_LENGTH = 4;
private static final SecureRandom random = new SecureRandom();

public Map<LocalDate, List<OrderInfo>> findAllOrdersByDate(String accessToken) {

String email = jwtUtil.getEmail(accessToken);
Expand Down Expand Up @@ -71,10 +80,52 @@ public Map<LocalDate, List<OrderInfo>> findAllOrdersByDate(String accessToken) {
return ordersByDate;
}

// public OrderInfo findMyOrderDetail(String accessToken) {
//
// String email = jwtUtil.getEmail(accessToken);
// User user = userQueryService.findByEmail(email);
// }
public OrderDetail findMyOrderDetail(String accessToken, Long orderId) {

String email = jwtUtil.getEmail(accessToken);
User user = userQueryService.findByEmail(email);

Order order = orderQueryService.findOrderById(orderId);
List<OrderItem> items = orderQueryService.findOrderItemByOrderId(orderId);
Menu menu = menuQueryService.findMenuById(items.get(0).getMenu().getId());
Store store = storeQueryService.findStoreById(menu.getStore().getId());
Market market = marketQueryService.findMarket(store.getMarket().getId());

List<MenuOrder> menuOrders = new ArrayList<>();

Integer price = 0;
for (OrderItem o : items) {

Menu singleMenu = menuQueryService.findMenuById(o.getMenu().getId());
price += singleMenu.getPrice();

MenuOrder menuOrder = new MenuOrder(
singleMenu.getName(),
o.getQuantity(),
singleMenu.getPrice()
);
menuOrders.add(menuOrder);
}

return new OrderDetail(
store.getName(),
order.getCreatedAt(),
generateOrderNumber(order.getCreatedAt()),
price,
"토스페이",
menuOrders
);
}

public String generateOrderNumber(LocalDateTime createdAt) {
String datePart = createdAt.format(ORDER_NUMBER_DATE_FORMAT);
String orderNumberPart = generateRandomNumber();
return datePart + orderNumberPart;
}

private String generateRandomNumber() {
int number = random.nextInt(10000);
return String.format("%04d", number);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.likelion.apimodule.order.dto;

public record MenuOrder(
String menuName,
Integer quantity,
Integer totalPrice
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.likelion.apimodule.order.dto;

import java.time.LocalDateTime;
import java.util.List;

public record OrderDetail(
String storeName,
LocalDateTime orderDate,
String orderNum,
Integer totalPrice,
String paymentTool,
List<MenuOrder> menuOrders
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.likelion.apimodule.order.presentation;

import com.likelion.apimodule.order.application.OrderFindUseCase;
import com.likelion.apimodule.order.dto.OrderDetail;
import com.likelion.apimodule.order.dto.OrderInfo;
import com.likelion.commonmodule.exception.common.ApplicationResponse;
import com.likelion.commonmodule.security.util.AuthConsts;
Expand All @@ -10,10 +11,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;
Expand Down Expand Up @@ -49,23 +47,25 @@ public ApplicationResponse<Map<LocalDate, List<OrderInfo>>> getMyOrderInfo(
}

// 주문 상세
// @GetMapping
// @ApiResponses(
// value = {
// @ApiResponse(
// responseCode = "200",
// description = "나의 주문상세 확인 성공",
// useReturnTypeSchema = true
// )
// }
// )
// @Operation(summary = "나의 주문내역 확인 API", description = "나의 주문내역 API 입니다.")
// public ApplicationResponse<OrderInfo> findMyOrderDetail(
// @RequestHeader(AuthConsts.ACCESS_TOKEN_HEADER
// ) {
//
// return ApplicationResponse.ok()
// }
@GetMapping("/{orderId}/detail")
@ApiResponses(
value = {
@ApiResponse(
responseCode = "200",
description = "나의 주문상세 확인 성공",
useReturnTypeSchema = true
)
}
)
@Operation(summary = "나의 주문내역 확인 API", description = "나의 주문내역 API 입니다.")
public ApplicationResponse<OrderDetail> findMyOrderDetail(
@RequestHeader(AuthConsts.ACCESS_TOKEN_HEADER) String accessToken,
@PathVariable Long orderId
) {

OrderDetail orderDetail = orderFindUseCase.findMyOrderDetail(accessToken, orderId);
return ApplicationResponse.ok(orderDetail);
}

// 주문하기

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.likelion.coremodule.order.exception;

import com.likelion.commonmodule.exception.common.ApiResponse;
import com.likelion.commonmodule.exception.common.BaseErrorCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum OrderErrorCode implements BaseErrorCode {

NO_ORDER_INFO(HttpStatus.BAD_REQUEST, "2000", "주문 정보가 존재하지 않습니다.");

private final HttpStatus httpStatus;
private final String code;
private final String message;


@Override
public ApiResponse<Void> getErrorResponse() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.likelion.coremodule.order.exception;

import com.likelion.commonmodule.exception.common.BaseErrorCode;
import lombok.Getter;

@Getter
public class OrderException extends RuntimeException {

private final BaseErrorCode errorCode;

private final Throwable cause;

public OrderException(BaseErrorCode errorCode) {
this.errorCode = errorCode;
this.cause = null;
}

public OrderException(BaseErrorCode errorCode, Throwable cause) {
this.errorCode = errorCode;
this.cause = cause;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.likelion.coremodule.order.domain.Order;
import com.likelion.coremodule.order.domain.OrderItem;
import com.likelion.coremodule.order.exception.OrderErrorCode;
import com.likelion.coremodule.order.exception.OrderException;
import com.likelion.coremodule.order.repository.OrderItemRepository;
import com.likelion.coremodule.order.repository.OrderRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -23,4 +25,8 @@ public List<Order> findOrderByUserId(Long userId) {
public List<OrderItem> findOrderItemByOrderId(Long orderId) {
return orderItemRepository.findOrderItemsByOrderId(orderId);
}

public Order findOrderById(Long orderId) {
return orderRepository.findById(orderId).orElseThrow(() -> new OrderException(OrderErrorCode.NO_ORDER_INFO));
}
}

0 comments on commit 51f34fe

Please sign in to comment.