From 74342c35abcaf8ef692637d484d9754bf6215c84 Mon Sep 17 00:00:00 2001 From: koreanMike513 Date: Tue, 4 Feb 2025 22:05:14 +0000 Subject: [PATCH] update: Updated Order MVC --- .../joyeuse_planete/core/domain/Order.java | 4 +-- .../dto/request/OrderCreateRequestDTO.java | 3 ++ .../orders/dto/response/OrderDTO.java | 10 +++---- .../repository/OrderRepositoryCustom.java | 3 ++ .../repository/OrderRepositoryCustomImpl.java | 29 ++++++++++++++++++- .../orders/service/OrderService.java | 4 +-- .../repository/OrderRepositoryTest.java | 1 - .../orders/service/OrderServiceKafkaTest.java | 15 ++++++---- 8 files changed, 53 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/com/f_lab/joyeuse_planete/core/domain/Order.java b/core/src/main/java/com/f_lab/joyeuse_planete/core/domain/Order.java index 30d2210..8f95fed 100644 --- a/core/src/main/java/com/f_lab/joyeuse_planete/core/domain/Order.java +++ b/core/src/main/java/com/f_lab/joyeuse_planete/core/domain/Order.java @@ -45,6 +45,8 @@ public class Order extends BaseTimeEntity { private int quantity; + private double rate; + @Enumerated(EnumType.STRING) private OrderStatus status; @@ -56,8 +58,6 @@ public class Order extends BaseTimeEntity { @JoinColumn(name = "voucher_id") private Voucher voucher; - private LocalDateTime collectionTime; - public BigDecimal calculateTotalCost() { return (voucher != null) ? voucher.apply(food.calculateCost(quantity), food.getCurrency()) diff --git a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/request/OrderCreateRequestDTO.java b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/request/OrderCreateRequestDTO.java index e748e92..22e754a 100644 --- a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/request/OrderCreateRequestDTO.java +++ b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/request/OrderCreateRequestDTO.java @@ -27,6 +27,9 @@ public class OrderCreateRequestDTO { @JsonProperty("store_id") private Long storeId; + @JsonProperty("currency_id") + private Long currencyId; + @JsonProperty("total_cost") private BigDecimal totalCost; diff --git a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/response/OrderDTO.java b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/response/OrderDTO.java index 584053e..a3491f1 100644 --- a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/response/OrderDTO.java +++ b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/dto/response/OrderDTO.java @@ -32,6 +32,9 @@ public class OrderDTO { @JsonProperty("quantity") private int quantity; + @JsonProperty("rate") + private double rate; + @JsonProperty("status") private String status; @@ -44,9 +47,6 @@ public class OrderDTO { @JsonProperty("created_at") private LocalDateTime createdAt; - @JsonProperty("collection_time") - private LocalDateTime collectionTime; - @Builder @QueryProjection public OrderDTO( @@ -56,10 +56,10 @@ public OrderDTO( String currencyCode, String currencySymbol, int quantity, + double rate, String status, Long payment, Long voucher, - LocalDateTime collectionTime, LocalDateTime createdAt ) { @@ -69,10 +69,10 @@ public OrderDTO( this.currencyCode = currencyCode; this.currencySymbol = currencySymbol; this.quantity = quantity; + this.rate = rate; this.status = status; this.payment = payment; this.voucher = voucher; - this.collectionTime = collectionTime; this.createdAt = createdAt; } } diff --git a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustom.java b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustom.java index 312b57b..319a0b8 100644 --- a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustom.java +++ b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustom.java @@ -1,6 +1,8 @@ package com.f_lab.joyeuse_planete.orders.repository; +import com.f_lab.joyeuse_planete.core.domain.Order; import com.f_lab.joyeuse_planete.orders.domain.OrderSearchCondition; +import com.f_lab.joyeuse_planete.orders.dto.request.OrderCreateRequestDTO; import com.f_lab.joyeuse_planete.orders.dto.response.OrderDTO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,4 +12,5 @@ public interface OrderRepositoryCustom { // Page findOrders(Long memberId, OrderSearchCondition condition, Pageable pageable); Page findOrders(OrderSearchCondition condition, Pageable pageable); + Order saveOrder(OrderCreateRequestDTO request); } diff --git a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustomImpl.java b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustomImpl.java index 3531598..6def745 100644 --- a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustomImpl.java +++ b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryCustomImpl.java @@ -1,7 +1,10 @@ package com.f_lab.joyeuse_planete.orders.repository; +import com.f_lab.joyeuse_planete.core.domain.Order; import com.f_lab.joyeuse_planete.core.domain.OrderStatus; + import com.f_lab.joyeuse_planete.orders.domain.OrderSearchCondition; +import com.f_lab.joyeuse_planete.orders.dto.request.OrderCreateRequestDTO; import com.f_lab.joyeuse_planete.orders.dto.response.OrderDTO; import com.f_lab.joyeuse_planete.orders.dto.response.QOrderDTO; import com.querydsl.core.types.OrderSpecifier; @@ -9,6 +12,7 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; + import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -44,6 +48,29 @@ public OrderRepositoryCustomImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } + @Override + public Order saveOrder(OrderCreateRequestDTO request) { + long orderId = queryFactory + .insert(order) + .columns( + order.food.id, + order.totalCost, + order.quantity, + order.status, + order.voucher.id + ) + .values( + request.getFoodId(), + request.getTotalCost(), + request.getQuantity(), + OrderStatus.READY, + request.getVoucherId() + ) + .execute(); + + return queryFactory.selectFrom(order).where(order.id.eq(orderId)).fetchFirst(); + } + @Override public Page findOrders(OrderSearchCondition condition, Pageable pageable) { List results = queryFactory @@ -54,10 +81,10 @@ public Page findOrders(OrderSearchCondition condition, Pageable pageab food.currency.currencyCode, food.currency.currencySymbol, order.quantity, + order.rate, order.status.stringValue(), order.payment.id.as("paymentId"), order.voucher.id.as("voucherId"), - order.collectionTime.as("collectionTime"), order.createdAt.as("createdAt") )) .from(order) diff --git a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/service/OrderService.java b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/service/OrderService.java index 5ee8548..8d218eb 100644 --- a/orders/src/main/java/com/f_lab/joyeuse_planete/orders/service/OrderService.java +++ b/orders/src/main/java/com/f_lab/joyeuse_planete/orders/service/OrderService.java @@ -47,9 +47,9 @@ public void updateOrderStatus(Long orderId, OrderStatus status) { @Transactional public OrderCreateResponseDTO createFoodOrder(OrderCreateRequestDTO request) { - Order order = request.toEntity(); + Order order; try { - orderRepository.save(order); + order = orderRepository.saveOrder(request); } catch (JoyeusePlaneteApplicationException e) { LogUtil.exception("OrderService.createFoodOrder", e); diff --git a/orders/src/test/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryTest.java b/orders/src/test/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryTest.java index ba6165f..f537cea 100644 --- a/orders/src/test/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryTest.java +++ b/orders/src/test/java/com/f_lab/joyeuse_planete/orders/repository/OrderRepositoryTest.java @@ -206,7 +206,6 @@ private OrderDTO from(Order order) { .status(order.getStatus().name()) .payment(order.getPayment() != null ? order.getPayment().getId() : null) .voucher(order.getVoucher() != null ? order.getVoucher().getId() : null) - .collectionTime(order.getCollectionTime()) .createdAt(order.getCreatedAt()) .build(); } diff --git a/orders/src/test/java/com/f_lab/joyeuse_planete/orders/service/OrderServiceKafkaTest.java b/orders/src/test/java/com/f_lab/joyeuse_planete/orders/service/OrderServiceKafkaTest.java index b3ebb78..9aa2339 100644 --- a/orders/src/test/java/com/f_lab/joyeuse_planete/orders/service/OrderServiceKafkaTest.java +++ b/orders/src/test/java/com/f_lab/joyeuse_planete/orders/service/OrderServiceKafkaTest.java @@ -3,7 +3,6 @@ import com.f_lab.joyeuse_planete.core.domain.Order; import com.f_lab.joyeuse_planete.core.exceptions.JoyeusePlaneteApplicationException; -import com.f_lab.joyeuse_planete.core.kafka.exceptions.RetryableException; import com.f_lab.joyeuse_planete.core.kafka.service.KafkaService; import com.f_lab.joyeuse_planete.orders.dto.request.OrderCreateRequestDTO; import com.f_lab.joyeuse_planete.orders.dto.response.OrderCreateResponseDTO; @@ -43,9 +42,10 @@ void testCreateOrderSuccess() { // given OrderCreateResponseDTO expected = createOrderCreateResponseDTO("PROCESSING"); OrderCreateRequestDTO request = createOrderCreateRequestDTO(); + Order order = createOrder(); // when - when(orderRepository.save(any(Order.class))).thenReturn(null); + when(orderRepository.saveOrder(any())).thenReturn(order); doNothing().when(kafkaService).sendKafkaEvent(anyString(), any(Object.class)); OrderCreateResponseDTO response = orderService.createFoodOrder(request); @@ -60,7 +60,7 @@ void testCreateOrderRepositoryThrowExceptionFail1() { OrderCreateRequestDTO request = createOrderCreateRequestDTO(); // when - when(orderRepository.save(any(Order.class))).thenThrow(new RuntimeException()); + when(orderRepository.saveOrder(any())).thenThrow(new RuntimeException()); // then assertThatThrownBy(() -> orderService.createFoodOrder(request)) @@ -74,7 +74,7 @@ void testCreateOrderRepositoryThrowExceptionFail2() { OrderCreateRequestDTO request = createOrderCreateRequestDTO(); // when - when(orderRepository.save(any(Order.class))).thenThrow(new JoyeusePlaneteApplicationException()); + when(orderRepository.saveOrder(any())).thenThrow(new JoyeusePlaneteApplicationException()); // then assertThatThrownBy(() -> orderService.createFoodOrder(request)) @@ -86,9 +86,10 @@ void testCreateOrderRepositoryThrowExceptionFail2() { void testCreateOrderRepositoryKafkaServiceFail() { // given OrderCreateRequestDTO request = createOrderCreateRequestDTO(); + Order order = createOrder(); // when - when(orderRepository.save(any(Order.class))).thenReturn(null); + when(orderRepository.saveOrder(any())).thenReturn(order); doThrow(JoyeusePlaneteApplicationException.class).when(kafkaService).sendKafkaEvent(any(), any()); // then @@ -113,6 +114,10 @@ private OrderCreateRequestDTO createOrderCreateRequestDTO() { .build(); } + private Order createOrder() { + return Order.builder().id(1L).build(); + } + private OrderCreateResponseDTO createOrderCreateResponseDTO(String message) { return new OrderCreateResponseDTO(message); }