From 56cdf7191a3687bcb232eeb8324a0030ae95ee5c Mon Sep 17 00:00:00 2001 From: Ali CANLI Date: Sun, 10 Jul 2022 13:34:42 +0300 Subject: [PATCH] Add application service classes. --- .../domain/OrderCreateCommandHandler.java | 53 +++------------- .../food/order/domain/OrderCreateHelper.java | 63 +++++++++++++++++++ 2 files changed, 72 insertions(+), 44 deletions(-) create mode 100644 order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateHelper.java diff --git a/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateCommandHandler.java b/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateCommandHandler.java index 571a1f4..6d840cd 100644 --- a/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateCommandHandler.java +++ b/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateCommandHandler.java @@ -3,64 +3,29 @@ package com.food.order.domain; import com.food.order.domain.dto.create.CreateOrderCommand; import com.food.order.domain.dto.create.CreateOrderResponse; import com.food.order.domain.mapper.OrderDataMapper; -import com.food.order.domain.ports.output.repository.CustomerRepository; -import com.food.order.domain.ports.output.repository.OrderRepository; -import com.food.order.domain.ports.output.repository.RestaurantRepository; -import com.food.order.system.domain.entity.Order; -import com.food.order.system.domain.entity.Restaurant; -import com.food.order.system.domain.exception.OrderDomainException; -import com.food.order.system.domain.service.OrderDomainService; +import com.food.order.domain.ports.output.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Objects; -import java.util.UUID; @Component @Slf4j @RequiredArgsConstructor public class OrderCreateCommandHandler { - private final OrderDomainService orderDomainService; - private final OrderRepository orderRepository; - private final CustomerRepository customerRepository; - private final RestaurantRepository restaurantRepository; + private final OrderCreateHelper orderCreateHelper; private final OrderDataMapper orderDataMapper; - @Transactional + private final OrderCreatedPaymentRequestMessagePublisher orderCreatedPaymentRequestMessagePublisher; + + public CreateOrderResponse createOrder(CreateOrderCommand createOrderCommand) { - log.info("createOrder: {}", createOrderCommand); - checkCustomer(createOrderCommand.getCustomerId()); - Restaurant restaurant = checkRestaurant(createOrderCommand); - var order = orderDataMapper.createOrderCommandToOrder(createOrderCommand); - var createdEventOrder = orderDomainService.validateAndInitiateOrder(order, restaurant); - var savedOrder = saveOrder(order); - log.info("createOrder with id: {}", savedOrder.getId().getValue()); - return orderDataMapper.orderToCreateOrderResponse(savedOrder,"Order created successfully"); + var persistOrder = orderCreateHelper.persistOrder(createOrderCommand); + log.info("createOrder with id: {}", persistOrder.getOrder().getId().getValue()); + orderCreatedPaymentRequestMessagePublisher.publish(persistOrder); + return orderDataMapper.orderToCreateOrderResponse(persistOrder.getOrder(),"Order created successfully"); } - private Restaurant checkRestaurant(CreateOrderCommand createOrderCommand) { - return restaurantRepository.findRestaurantInformation - (orderDataMapper.createOrderCommandToRestaurant(createOrderCommand)) - .orElseThrow(() -> new OrderDomainException("Restaurant not found. " + - "Please check restaurant id: " + createOrderCommand.getRestaurantId())); - } - - - private void checkCustomer(UUID customerId) { - customerRepository.findCustomer(customerId) - .orElseThrow(() -> new OrderDomainException("Customer not found. CustomerId: " + customerId)); - } - - private Order saveOrder(Order order){ - var savedOrder = orderRepository.save(order); - if (Objects.isNull(savedOrder)) { - throw new OrderDomainException("Order not saved"); - } - return savedOrder; - } } diff --git a/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateHelper.java b/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateHelper.java new file mode 100644 index 0000000..02c1eb1 --- /dev/null +++ b/order-service/order-domain/order-application-service/src/main/java/com/food/order/domain/OrderCreateHelper.java @@ -0,0 +1,63 @@ +package com.food.order.domain; + +import com.food.order.domain.dto.create.CreateOrderCommand; +import com.food.order.domain.mapper.OrderDataMapper; +import com.food.order.domain.ports.output.repository.CustomerRepository; +import com.food.order.domain.ports.output.repository.OrderRepository; +import com.food.order.domain.ports.output.repository.RestaurantRepository; +import com.food.order.system.domain.entity.Order; +import com.food.order.system.domain.entity.Restaurant; +import com.food.order.system.domain.event.OrderCreatedEvent; +import com.food.order.system.domain.exception.OrderDomainException; +import com.food.order.system.domain.service.OrderDomainService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; +import java.util.UUID; + +@Component +@Slf4j +@RequiredArgsConstructor +public class OrderCreateHelper { + private final OrderDomainService orderDomainService; + private final OrderRepository orderRepository; + private final CustomerRepository customerRepository; + private final RestaurantRepository restaurantRepository; + private final OrderDataMapper orderDataMapper; + + @Transactional + public OrderCreatedEvent persistOrder(CreateOrderCommand createOrderCommand) { + log.info("createOrder: {}", createOrderCommand); + checkCustomer(createOrderCommand.getCustomerId()); + Restaurant restaurant = checkRestaurant(createOrderCommand); + var order = orderDataMapper.createOrderCommandToOrder(createOrderCommand); + var createdEventOrder = orderDomainService.validateAndInitiateOrder(order, restaurant); + saveOrder(order); + log.info("Created Order Event : {}", createdEventOrder); + return createdEventOrder; + } + + private Restaurant checkRestaurant(CreateOrderCommand createOrderCommand) { + return restaurantRepository.findRestaurantInformation + (orderDataMapper.createOrderCommandToRestaurant(createOrderCommand)) + .orElseThrow(() -> new OrderDomainException("Restaurant not found. " + + "Please check restaurant id: " + createOrderCommand.getRestaurantId())); + } + + + private void checkCustomer(UUID customerId) { + customerRepository.findCustomer(customerId) + .orElseThrow(() -> new OrderDomainException("Customer not found. CustomerId: " + customerId)); + } + + private void saveOrder(Order order){ + var savedOrder = orderRepository.save(order); + if (Objects.isNull(savedOrder)) { + throw new OrderDomainException("Order not saved"); + } + } + +}