This commit is contained in:
Ali CANLI
2022-07-12 12:48:42 +03:00
parent f4e7ee19cf
commit 2377262b64
81 changed files with 756 additions and 221 deletions

View File

@@ -1,15 +0,0 @@
package com.food.order.domain.ports.input.service;
import com.food.order.domain.dto.create.CreateOrderCommand;
import com.food.order.domain.dto.create.CreateOrderResponse;
import com.food.order.domain.dto.track.TrackOrderQuery;
import com.food.order.domain.dto.track.TrackOrderResponse;
import javax.validation.Valid;
public interface OrderApplicationService {
CreateOrderResponse createOrder(@Valid CreateOrderCommand createOrderCommand);
TrackOrderResponse trackOrder(@Valid TrackOrderQuery trackOrderQuery);
}

View File

@@ -1,8 +0,0 @@
package com.food.order.domain.ports.output.message.publisher.restaurantapproval;
import com.food.order.domain.event.publisher.DomainEventPublisher;
import com.food.order.system.domain.event.OrderPaidEvent;
public interface OrderPaidRestaurantRequestMessagePublisher extends DomainEventPublisher<OrderPaidEvent> {
}

View File

@@ -1,16 +1,16 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.dto.create.CreateOrderCommand;
import com.food.order.domain.dto.create.CreateOrderResponse;
import com.food.order.domain.dto.track.TrackOrderQuery;
import com.food.order.domain.dto.track.TrackOrderResponse;
import com.food.order.domain.ports.input.service.OrderApplicationService;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.dto.create.CreateOrderResponse;
import com.food.order.sysyem.dto.track.TrackOrderQuery;
import com.food.order.sysyem.dto.track.TrackOrderResponse;
import com.food.order.sysyem.ports.input.service.OrderApplicationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
@Service
@Component
@Validated
@Slf4j
@RequiredArgsConstructor

View File

@@ -1,9 +1,9 @@
package com.food.order.domain;
package com.food.order.sysyem;
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.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.dto.create.CreateOrderResponse;
import com.food.order.sysyem.mapper.OrderDataMapper;
import com.food.order.sysyem.ports.output.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

View File

@@ -1,10 +1,10 @@
package com.food.order.domain;
package com.food.order.sysyem;
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.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.mapper.OrderDataMapper;
import com.food.order.sysyem.ports.output.repository.CustomerRepository;
import com.food.order.sysyem.ports.output.repository.OrderRepository;
import com.food.order.sysyem.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;

View File

@@ -1,9 +1,9 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.dto.track.TrackOrderQuery;
import com.food.order.domain.dto.track.TrackOrderResponse;
import com.food.order.domain.mapper.OrderDataMapper;
import com.food.order.domain.ports.output.repository.OrderRepository;
import com.food.order.sysyem.dto.track.TrackOrderQuery;
import com.food.order.sysyem.dto.track.TrackOrderResponse;
import com.food.order.sysyem.mapper.OrderDataMapper;
import com.food.order.sysyem.ports.output.repository.OrderRepository;
import com.food.order.system.domain.exception.OrderNotFoundException;
import com.food.order.system.domain.valueobject.TrackingId;
import lombok.RequiredArgsConstructor;

View File

@@ -1,7 +1,7 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.dto.message.PaymentResponse;
import com.food.order.domain.ports.input.message.listener.payment.PaymentResponseMessageListener;
import com.food.order.sysyem.dto.message.PaymentResponse;
import com.food.order.sysyem.ports.input.message.listener.payment.PaymentResponseMessageListener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.dto.message.RestaurantApprovalResponse;
import com.food.order.domain.ports.input.message.listener.restaurantapproval.RestaurantApprovalResponseMessageListener;
import com.food.order.sysyem.dto.message.RestaurantApprovalResponse;
import com.food.order.sysyem.ports.input.message.listener.restaurantapproval.RestaurantApprovalResponseMessageListener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@@ -0,0 +1,15 @@
package com.food.order.sysyem.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "order-service")
public class OrderServiceConfigData {
private String paymentRequestTopicName;
private String paymentResponseTopicName;
private String restaurantApprovalRequestTopicName;
private String restaurantApprovalResponseTopicName;
}

View File

@@ -1,7 +1,6 @@
package com.food.order.domain.dto.create;
package com.food.order.sysyem.dto.create;
import com.food.order.domain.valueobject.OrderStatus;
import lombok.AllArgsConstructor;
import com.food.order.sysyem.valueobject.OrderStatus;
import lombok.Builder;
import javax.validation.constraints.NotNull;

View File

@@ -1,4 +1,4 @@
package com.food.order.domain.dto.create;
package com.food.order.sysyem.dto.create;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package com.food.order.domain.dto.create;
package com.food.order.sysyem.dto.create;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,11 +1,12 @@
package com.food.order.domain.dto.message;
package com.food.order.sysyem.dto.message;
import com.food.order.domain.valueobject.PaymentStatus;
import com.food.order.sysyem.valueobject.PaymentStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.List;
@Getter
@@ -19,6 +20,7 @@ public class PaymentResponse {
private String paymentId;
private String customerId;
private BigDecimal price;
private Instant createdAt;
private PaymentStatus paymentStatus;
private List<String> failureMessages;
}

View File

@@ -1,6 +1,6 @@
package com.food.order.domain.dto.message;
package com.food.order.sysyem.dto.message;
import com.food.order.domain.valueobject.OrderApprovalStatus;
import com.food.order.sysyem.valueobject.OrderApprovalStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,7 +1,6 @@
package com.food.order.domain.dto.track;
package com.food.order.sysyem.dto.track;
import com.food.order.domain.valueobject.OrderStatus;
import lombok.AllArgsConstructor;
import com.food.order.sysyem.valueobject.OrderStatus;
import lombok.Builder;
import javax.validation.constraints.NotNull;

View File

@@ -1,13 +1,13 @@
package com.food.order.domain.mapper;
package com.food.order.sysyem.mapper;
import com.food.order.domain.dto.create.CreateOrderCommand;
import com.food.order.domain.dto.create.CreateOrderResponse;
import com.food.order.domain.dto.create.OrderAddress;
import com.food.order.domain.dto.track.TrackOrderResponse;
import com.food.order.domain.valueobject.CustomerId;
import com.food.order.domain.valueobject.Money;
import com.food.order.domain.valueobject.ProductId;
import com.food.order.domain.valueobject.RestaurantId;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.dto.create.CreateOrderResponse;
import com.food.order.sysyem.dto.create.OrderAddress;
import com.food.order.sysyem.dto.track.TrackOrderResponse;
import com.food.order.sysyem.valueobject.CustomerId;
import com.food.order.sysyem.valueobject.Money;
import com.food.order.sysyem.valueobject.ProductId;
import com.food.order.sysyem.valueobject.RestaurantId;
import com.food.order.system.domain.entity.Order;
import com.food.order.system.domain.entity.OrderItem;
import com.food.order.system.domain.entity.Product;
@@ -53,7 +53,7 @@ public class OrderDataMapper {
.build();
}
private List<OrderItem> orderItemsToOrderItemEntities(List<com.food.order.domain.dto.create.OrderItem> orderItems) {
private List<OrderItem> orderItemsToOrderItemEntities(List<com.food.order.sysyem.dto.create.OrderItem> orderItems) {
return orderItems.stream()
.map(orderItem ->
OrderItem.builder()

View File

@@ -1,6 +1,6 @@
package com.food.order.domain.ports.input.message.listener.payment;
package com.food.order.sysyem.ports.input.message.listener.payment;
import com.food.order.domain.dto.message.PaymentResponse;
import com.food.order.sysyem.dto.message.PaymentResponse;
public interface PaymentResponseMessageListener {

View File

@@ -1,6 +1,6 @@
package com.food.order.domain.ports.input.message.listener.restaurantapproval;
package com.food.order.sysyem.ports.input.message.listener.restaurantapproval;
import com.food.order.domain.dto.message.RestaurantApprovalResponse;
import com.food.order.sysyem.dto.message.RestaurantApprovalResponse;
public interface RestaurantApprovalResponseMessageListener {
void orderApproved(RestaurantApprovalResponse restaurantApprovalResponse);

View File

@@ -0,0 +1,15 @@
package com.food.order.sysyem.ports.input.service;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.dto.create.CreateOrderResponse;
import com.food.order.sysyem.dto.track.TrackOrderQuery;
import com.food.order.sysyem.dto.track.TrackOrderResponse;
import javax.validation.Valid;
public interface OrderApplicationService {
CreateOrderResponse createOrder(@Valid CreateOrderCommand createOrderCommand);
TrackOrderResponse trackOrder(@Valid TrackOrderQuery trackOrderQuery);
}

View File

@@ -1,6 +1,6 @@
package com.food.order.domain.ports.output.message.publisher.payment;
package com.food.order.sysyem.ports.output.message.publisher.payment;
import com.food.order.domain.event.publisher.DomainEventPublisher;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import com.food.order.system.domain.event.OrderCancelledEvent;
public interface OrderCancelledPaymentRequestMessagePublisher extends DomainEventPublisher<OrderCancelledEvent> {

View File

@@ -1,6 +1,6 @@
package com.food.order.domain.ports.output.message.publisher.payment;
package com.food.order.sysyem.ports.output.message.publisher.payment;
import com.food.order.domain.event.publisher.DomainEventPublisher;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import com.food.order.system.domain.event.OrderCreatedEvent;
public interface OrderCreatedPaymentRequestMessagePublisher extends DomainEventPublisher<OrderCreatedEvent> {

View File

@@ -1,4 +1,4 @@
package com.food.order.domain.ports.output.repository;
package com.food.order.sysyem.ports.output.repository;
import com.food.order.system.domain.entity.Customer;

View File

@@ -1,4 +1,4 @@
package com.food.order.domain.ports.output.repository;
package com.food.order.sysyem.ports.output.repository;
import com.food.order.system.domain.entity.Order;
import com.food.order.system.domain.valueobject.TrackingId;

View File

@@ -1,4 +1,4 @@
package com.food.order.domain.ports.output.repository;
package com.food.order.sysyem.ports.output.repository;
import com.food.order.system.domain.entity.Restaurant;

View File

@@ -1,19 +1,20 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.dto.create.CreateOrderCommand;
import com.food.order.domain.dto.create.OrderAddress;
import com.food.order.domain.dto.create.OrderItem;
import com.food.order.domain.mapper.OrderDataMapper;
import com.food.order.domain.ports.input.service.OrderApplicationService;
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.domain.valueobject.*;
import com.food.order.system.domain.entity.Customer;
import com.food.order.system.domain.entity.Order;
import com.food.order.system.domain.entity.Product;
import com.food.order.system.domain.entity.Restaurant;
import com.food.order.system.domain.exception.OrderDomainException;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.dto.create.OrderAddress;
import com.food.order.sysyem.dto.create.OrderItem;
import com.food.order.sysyem.mapper.OrderDataMapper;
import com.food.order.sysyem.ports.input.service.OrderApplicationService;
import com.food.order.sysyem.ports.output.repository.CustomerRepository;
import com.food.order.sysyem.ports.output.repository.OrderRepository;
import com.food.order.sysyem.ports.output.repository.RestaurantRepository;
import com.food.order.sysyem.domain.valueobject.*;
import com.food.order.sysyem.valueobject.*;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -168,14 +169,14 @@ class OrderApplicationTest {
void testCreateOrderWrongPrice(){
OrderDomainException exception = Assertions.assertThrows(OrderDomainException.class,
() -> orderApplicationService.createOrder(createOrderCommandWrongPrice));
assertEquals("Order total price is not equal to the sum of order items prices", exception.getMessage());
Assertions.assertEquals("Order total price is not equal to the sum of order items prices", exception.getMessage());
}
@Test
void testCreateOrderWrongProductPrice(){
OrderDomainException exception = Assertions.assertThrows(OrderDomainException.class,
() -> orderApplicationService.createOrder(createOrderCommandWrongProductPrice));
assertEquals("Order item price is not valid", exception.getMessage());
Assertions.assertEquals("Order item price is not valid", exception.getMessage());
}
@Test
@@ -194,7 +195,7 @@ class OrderApplicationTest {
.thenReturn(Optional.of(restaurant));
OrderDomainException exception = Assertions.assertThrows(OrderDomainException.class,
() -> orderApplicationService.createOrder(createOrderCommand));
assertEquals("Restaurant is not active, please try again later. Restaurant id: "+ restaurant.getId(), exception.getMessage());
Assertions.assertEquals("Restaurant is not active, please try again later. Restaurant id: "+ restaurant.getId(), exception.getMessage());
}
}

View File

@@ -1,18 +1,18 @@
package com.food.order.domain;
package com.food.order.sysyem;
import com.food.order.domain.ports.output.message.publisher.payment.OrderCancelledPaymentRequestMessagePublisher;
import com.food.order.domain.ports.output.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher;
import com.food.order.domain.ports.output.message.publisher.restaurantapproval.OrderPaidRestaurantRequestMessagePublisher;
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.sysyem.ports.output.message.publisher.payment.OrderCancelledPaymentRequestMessagePublisher;
import com.food.order.sysyem.ports.output.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher;
import com.food.order.sysyem.ports.output.message.publisher.restaurantapproval.OrderPaidRestaurantRequestMessagePublisher;
import com.food.order.sysyem.ports.output.repository.CustomerRepository;
import com.food.order.sysyem.ports.output.repository.OrderRepository;
import com.food.order.sysyem.ports.output.repository.RestaurantRepository;
import com.food.order.system.domain.service.OrderDomainService;
import com.food.order.system.domain.service.impl.OrderDomainServiceImpl;
import org.mockito.Mockito;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication(scanBasePackages = "com.food.order.domain")
@SpringBootApplication(scanBasePackages = "com.food.order.system.domain")
public class OrderTestConfiguration {
@Bean

View File

@@ -1,12 +0,0 @@
@startuml
skinparam defaultTextAlignment center
skinparam rectangle {
BackgroundColor<<optional>> beige
BackgroundColor<<test>> lightGreen
BackgroundColor<<runtime>> lightBlue
BackgroundColor<<provided>> lightGray
}
rectangle "order-application-service" as com_food_order_order_application_service_jar
rectangle "order-core-domain" as com_food_order_order_core_domain_jar
com_food_order_order_application_service_jar -[#000000]-> com_food_order_order_core_domain_jar
@enduml

View File

@@ -1,7 +1,7 @@
package com.food.order.system.domain.entity;
import com.food.order.domain.entity.AggregateRoot;
import com.food.order.domain.valueobject.CustomerId;
import com.food.order.sysyem.entity.AggregateRoot;
import com.food.order.sysyem.valueobject.CustomerId;
public class Customer extends AggregateRoot<CustomerId> {

View File

@@ -1,11 +1,11 @@
package com.food.order.system.domain.entity;
import com.food.order.domain.entity.AggregateRoot;
import com.food.order.domain.valueobject.*;
import com.food.order.sysyem.entity.AggregateRoot;
import com.food.order.system.domain.exception.OrderDomainException;
import com.food.order.system.domain.valueobject.OrderItemId;
import com.food.order.system.domain.valueobject.StreetAddress;
import com.food.order.system.domain.valueobject.TrackingId;
import com.food.order.sysyem.valueobject.*;
import java.util.List;
import java.util.Objects;

View File

@@ -1,8 +1,8 @@
package com.food.order.system.domain.entity;
import com.food.order.domain.entity.BaseEntity;
import com.food.order.domain.valueobject.Money;
import com.food.order.domain.valueobject.OrderId;
import com.food.order.sysyem.entity.BaseEntity;
import com.food.order.sysyem.valueobject.Money;
import com.food.order.sysyem.valueobject.OrderId;
import com.food.order.system.domain.valueobject.OrderItemId;
public class OrderItem extends BaseEntity<OrderItemId> {

View File

@@ -1,8 +1,8 @@
package com.food.order.system.domain.entity;
import com.food.order.domain.entity.BaseEntity;
import com.food.order.domain.valueobject.Money;
import com.food.order.domain.valueobject.ProductId;
import com.food.order.sysyem.entity.BaseEntity;
import com.food.order.sysyem.valueobject.Money;
import com.food.order.sysyem.valueobject.ProductId;
public class Product extends BaseEntity<ProductId> {
private String name;

View File

@@ -1,7 +1,7 @@
package com.food.order.system.domain.entity;
import com.food.order.domain.entity.AggregateRoot;
import com.food.order.domain.valueobject.RestaurantId;
import com.food.order.sysyem.entity.AggregateRoot;
import com.food.order.sysyem.valueobject.RestaurantId;
import java.util.List;

View File

@@ -1,6 +1,6 @@
package com.food.order.system.domain.event;
import com.food.order.domain.event.DomainEvent;
import com.food.order.sysyem.event.DomainEvent;
import com.food.order.system.domain.entity.Order;
import java.time.ZonedDateTime;

View File

@@ -1,6 +1,6 @@
package com.food.order.system.domain.exception;
import com.food.order.domain.exception.DomainException;
import com.food.order.sysyem.exception.DomainException;
public class OrderDomainException extends DomainException {

View File

@@ -1,6 +1,6 @@
package com.food.order.system.domain.exception;
import com.food.order.domain.exception.DomainException;
import com.food.order.sysyem.exception.DomainException;
public class OrderNotFoundException extends DomainException {

View File

@@ -1,8 +1,6 @@
package com.food.order.system.domain.valueobject;
import com.food.order.domain.valueobject.BaseId;
import java.util.UUID;
import com.food.order.sysyem.valueobject.BaseId;
public class OrderItemId extends BaseId<Long> {

View File

@@ -1,6 +1,6 @@
package com.food.order.system.domain.valueobject;
import com.food.order.domain.valueobject.BaseId;
import com.food.order.sysyem.valueobject.BaseId;
import java.util.UUID;

View File

@@ -1,10 +0,0 @@
@startuml
skinparam defaultTextAlignment center
skinparam rectangle {
BackgroundColor<<optional>> beige
BackgroundColor<<test>> lightGreen
BackgroundColor<<runtime>> lightBlue
BackgroundColor<<provided>> lightGray
}
rectangle "order-core-domain" as com_food_order_order_core_domain_jar
@enduml

View File

@@ -1,10 +0,0 @@
@startuml
skinparam defaultTextAlignment center
skinparam rectangle {
BackgroundColor<<optional>> beige
BackgroundColor<<test>> lightGreen
BackgroundColor<<runtime>> lightBlue
BackgroundColor<<provided>> lightGray
}
rectangle "order-domain" as com_food_order_order_domain_pom
@enduml