From a811d122fc05d30f8e1bb8ec9f74333ba7bc7b91 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Tue, 15 Mar 2022 11:40:08 +0900 Subject: [PATCH] refactor(order-service): order-service listener MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - save order시 jpa의 listener을 이용하여 kafka 전송 --- .../domain/order/entity/OrderListener.java | 10 ---- .../domain/order/service/OrderSender.java | 2 +- .../domain/order/service/OrderService.java | 6 +-- .../order/service/OrderServiceImpl.java | 54 +++++++++++++++---- .../client/store/GetStoreReseponse.java | 14 +++++ .../global/client/store/OptionType.java | 5 ++ .../global/client/store/StoreClient.java | 12 +++-- .../src/main/resources/application.yml | 6 +-- 8 files changed, 75 insertions(+), 34 deletions(-) create mode 100644 order-service/src/main/java/com/justpickup/orderservice/global/client/store/GetStoreReseponse.java create mode 100644 order-service/src/main/java/com/justpickup/orderservice/global/client/store/OptionType.java diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/OrderListener.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/OrderListener.java index 7876cff..2f58647 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/OrderListener.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/entity/OrderListener.java @@ -3,15 +3,10 @@ package com.justpickup.orderservice.domain.order.entity; import com.justpickup.orderservice.domain.order.exception.OrderException; import com.justpickup.orderservice.domain.order.service.OrderSender; import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import javax.persistence.EntityManager; import javax.persistence.PostUpdate; @Slf4j @@ -23,23 +18,18 @@ public class OrderListener { private OrderSender orderSender; @PostUpdate - @Transactional(propagation = Propagation.REQUIRES_NEW) void postUpdate(Order order) { OrderStatus orderStatus = order.getOrderStatus(); if (orderStatus == OrderStatus.ORDER) { // TODO: 2022/03/10 Kafka 알림 전송 log.info("[OrderListener] {}", OrderStatus.ORDER.name()); - try{ orderSender.orderPlaced(OrderSender.KafkaSendOrderDto.createPrimitiveField(order)); }catch (Exception ex){ - order.fail(); - throw new OrderException(ex.getMessage()); } - } else if (orderStatus == OrderStatus.PLACED) { log.info("[OrderListener] {}", OrderStatus.PLACED.name()); } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderSender.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderSender.java index cba4a71..2d55071 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderSender.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderSender.java @@ -31,7 +31,7 @@ public class OrderSender { @Data @AllArgsConstructor @Builder - static class KafkaSendOrderDto{ + public static class KafkaSendOrderDto{ private Long id; private Long userId; diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java index a2f0577..647f5ad 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java @@ -1,10 +1,6 @@ package com.justpickup.orderservice.domain.order.service; -import com.justpickup.orderservice.domain.order.dto.FetchOrderDto; -import com.justpickup.orderservice.domain.order.dto.OrderDto; -import com.justpickup.orderservice.domain.order.dto.OrderMainDto; -import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; -import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; +import com.justpickup.orderservice.domain.order.dto.*; import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; import org.springframework.data.domain.Page; diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java index 7211c12..2bfd781 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java @@ -9,6 +9,9 @@ import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; import com.justpickup.orderservice.domain.orderItem.entity.OrderItem; import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption; +import com.justpickup.orderservice.global.client.store.GetItemResponse; +import com.justpickup.orderservice.global.client.store.GetStoreReseponse; +import com.justpickup.orderservice.global.client.store.StoreClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -19,7 +22,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; @@ -31,7 +37,8 @@ public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; private final OrderRepositoryCustom orderRepositoryCustom; - private final OrderSender orderSender; + + private final StoreClient storeClient; @Override public OrderMainDto findOrderMain(OrderSearchCondition condition, Long storeId) { @@ -75,7 +82,7 @@ public class OrderServiceImpl implements OrderService { @Override @Transactional - public void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId) { + public void addItemToBasket(OrderItemDto orderItemDto, Long storeId, Long userId) { //orderItemOption Entity를 생성한다. List orderItemOptions = orderItemDto.getOrderItemOptionDtoList() @@ -105,21 +112,48 @@ public class OrderServiceImpl implements OrderService { public FetchOrderDto fetchOrder(Long userId) { Order order = orderRepositoryCustom.fetchOrder(userId) .orElseThrow(() -> new OrderException("장바구니 정보를 찾을 수 없습니다.")); + GetStoreReseponse store = storeClient.getStore(String.valueOf(order.getStoreId())).getData(); - return new FetchOrderDto(order); + Map itemMap = storeClient.getItemAndItemOptions(order.getOrderItems().stream() + .map(OrderItem::getItemId) + .filter(Objects::nonNull) + .collect(Collectors.toUnmodifiableList()) + ).getData() + .stream().collect( + Collectors.toMap( + GetItemResponse::getId + ,getItemResponse->getItemResponse + ,(t, t2) -> t + ) + ); + + List orderItemDtoList = order.getOrderItems() + .stream().map(orderItem -> + new FetchOrderDto.OrderItemDto( + itemMap.get(orderItem.getItemId()) + ,orderItem)) + .collect(Collectors.toList()); + + + FetchOrderDto fetchOrderDto = FetchOrderDto.builder() + .userId(order.getUserId()) + .orderPrice(order.getOrderPrice()) + .storeName(store.getName()) + .orderItemDtoList(orderItemDtoList) + .build(); + + return fetchOrderDto; } @Override @Transactional public void saveOrder(Long userId) { - Order order = orderRepository.findByUserIdAndOrderStatus(userId, OrderStatus.PENDING) + + orderRepository.findByUserIdAndOrderStatus(userId, OrderStatus.PENDING) .orElseThrow(() -> new OrderException("장바구니 정보를 찾을 수 없습니다.")) - .setOrderStatus(OrderStatus.PLACED); - try{ - orderSender.orderPlaced(OrderSender.KafkaSendOrderDto.createPrimitiveField(order)); - }catch (Exception ex){ - throw new OrderException(ex.getMessage()); - } + .order(); + + } @Override diff --git a/order-service/src/main/java/com/justpickup/orderservice/global/client/store/GetStoreReseponse.java b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/GetStoreReseponse.java new file mode 100644 index 0000000..3677001 --- /dev/null +++ b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/GetStoreReseponse.java @@ -0,0 +1,14 @@ +package com.justpickup.orderservice.global.client.store; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GetStoreReseponse { + private Long id; + private String name; + private String phoneNumber; +} \ No newline at end of file diff --git a/order-service/src/main/java/com/justpickup/orderservice/global/client/store/OptionType.java b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/OptionType.java new file mode 100644 index 0000000..018b6e0 --- /dev/null +++ b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/OptionType.java @@ -0,0 +1,5 @@ +package com.justpickup.orderservice.global.client.store; + +public enum OptionType { + REQUIRED, OTHER +} diff --git a/order-service/src/main/java/com/justpickup/orderservice/global/client/store/StoreClient.java b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/StoreClient.java index c2762bb..cbcb1ea 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/global/client/store/StoreClient.java +++ b/order-service/src/main/java/com/justpickup/orderservice/global/client/store/StoreClient.java @@ -5,9 +5,15 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -@FeignClient(name = "STORE-SERVICE", url = "127.0.0.1:8001/store-service") +import java.util.List; + +@FeignClient("store-service") public interface StoreClient { - @GetMapping("/item/{itemId}") - Result getItem(@PathVariable("itemId") Long itemId); + @GetMapping("/store/{storeId}") + Result getStore(@PathVariable(value = "storeId") String storeId); + + @GetMapping("/api/customer/items/{itemId}") + Result> getItemAndItemOptions(@PathVariable(value = "itemId") List itemIds); + } diff --git a/order-service/src/main/resources/application.yml b/order-service/src/main/resources/application.yml index eccbfdf..e87c9d1 100644 --- a/order-service/src/main/resources/application.yml +++ b/order-service/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: spring: application: - name: order-servcie + name: order-service config: import: optional:configserver:http://127.0.0.1:8888 cloud: @@ -46,7 +46,3 @@ decorator.datasource.p6spy: kafka: host: 127.0.0.1 port: 9092 - -#feign key -token: - feign: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJmZWlnbiIsImV4cCI6MTE2NDY5NzY4NzAsImlhdCI6MTY0Njk3Njg3MH0.5x4Nx7oMnpF0_kZpbZsiB1u9eEbQ4IKIhJlEsa3D22cjZjvTHKz57GCz0sgXb_olhSNIVv9xF41A29-XYiFeBQ \ No newline at end of file