Merge pull request #4 from alicanli1995/dev-branch

Dev branch
This commit is contained in:
Ali CANLI
2022-07-09 22:11:07 +03:00
committed by GitHub
24 changed files with 311 additions and 0 deletions

33
.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@@ -0,0 +1,7 @@
package com.food.order.domain.event.publisher;
import com.food.order.domain.event.DomainEvent;
public interface DomainEventPublisher <T extends DomainEvent> {
void publish(T event);
}

View File

@@ -0,0 +1,6 @@
package com.food.order.domain.valueobject;
public enum OrderApprovalStatus {
APPROVED,
REJECTED
}

View File

@@ -0,0 +1,5 @@
package com.food.order.domain.valueobject;
public enum PaymentStatus {
COMPLETED,CANCELED,FAILED
}

View File

@@ -21,6 +21,21 @@
<artifactId>order-core-domain</artifactId>
</dependency>
<dependency>
<groupId>com.food.order</groupId>
<artifactId>common-domain</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,20 @@
package com.food.order.domain.dto.create;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
@Getter
@Builder
@AllArgsConstructor
public record CreateOrderCommand(@NotNull UUID customerId,
@NotNull UUID restaurantId,
@NotNull BigDecimal price,
@NotNull List<OrderItem> orderItems,
@NotNull OrderAddress orderAddress) {
}

View File

@@ -0,0 +1,17 @@
package com.food.order.domain.dto.create;
import com.food.order.domain.valueobject.OrderStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.NotNull;
import java.util.UUID;
@Getter
@Builder
@AllArgsConstructor
public record CreateOrderResponse(@NotNull UUID orderTrackingId,
@NotNull OrderStatus orderStatus,
@NotNull String message) {
}

View File

@@ -0,0 +1,16 @@
package com.food.order.domain.dto.create;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
@Getter
@AllArgsConstructor
@Builder
public record OrderAddress(@NotNull @Max(value = 50) String street,
@NotNull @Max(value = 50) String city,
@NotNull @Max(value = 10) String postalCode) {
}

View File

@@ -0,0 +1,17 @@
package com.food.order.domain.dto.create;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.UUID;
@Getter
@AllArgsConstructor
@Builder
public record OrderItem(@NotNull UUID productId,
@NotNull Integer quantity,
@NotNull BigDecimal price,
@NotNull BigDecimal subTotal) {}

View File

@@ -0,0 +1,24 @@
package com.food.order.domain.dto.message;
import com.food.order.domain.valueobject.PaymentStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import java.math.BigDecimal;
import java.util.List;
@Getter
@Builder
@AllArgsConstructor
public class PaymentResponse {
private String id;
private String sagaId;
private String orderId;
private String paymentId;
private String customerId;
private BigDecimal price;
private PaymentStatus paymentStatus;
private List<String> failureMessages;
}

View File

@@ -0,0 +1,22 @@
package com.food.order.domain.dto.message;
import com.food.order.domain.valueobject.OrderApprovalStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import java.time.Instant;
import java.util.List;
@Getter
@Builder
@AllArgsConstructor
public class RestaurantApprovalResponse {
private String id;
private String sagaId;
private String orderId;
private String restaurantId;
private Instant createdAt;
private OrderApprovalStatus orderApprovalStatus;
private List<String> failureMessages;
}

View File

@@ -0,0 +1,14 @@
package com.food.order.domain.dto.track;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.NotNull;
import java.util.UUID;
@Getter
@Builder
@AllArgsConstructor
public record TrackOrderQuery(@NotNull UUID orderTrackingId) {
}

View File

@@ -0,0 +1,18 @@
package com.food.order.domain.dto.track;
import com.food.order.domain.valueobject.OrderStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.UUID;
@Getter
@Builder
@AllArgsConstructor
public record TrackOrderResponse(@NotNull UUID orderTrackingId,
@NotNull OrderStatus orderStatus,
List<String> failureMessages) {
}

View File

@@ -0,0 +1,8 @@
package com.food.order.domain.mapper;
import org.springframework.stereotype.Component;
@Component
public class OrderDataMapper {
}

View File

@@ -0,0 +1,9 @@
package com.food.order.domain.ports.input.message.listener.payment;
import com.food.order.domain.dto.message.PaymentResponse;
public interface PaymentResponseMessageListener {
void paymentCompleted(PaymentResponse paymentResponse);
void paymentCancelled(PaymentResponse paymentResponse);
}

View File

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

View File

@@ -0,0 +1,15 @@
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

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

View File

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

View File

@@ -0,0 +1,8 @@
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

@@ -0,0 +1,10 @@
package com.food.order.domain.ports.output.repository;
import com.food.order.system.domain.entity.Customer;
import java.util.Optional;
import java.util.UUID;
public interface CustomerRepository {
Optional<Customer> findCustomer(UUID customerId);
}

View File

@@ -0,0 +1,14 @@
package com.food.order.domain.ports.output.repository;
import com.food.order.system.domain.entity.Order;
import java.util.Optional;
public interface OrderRepository {
Order save(Order order);
Optional<Order> findByTrackingId(String trackingId);
}

View File

@@ -0,0 +1,9 @@
package com.food.order.domain.ports.output.repository;
import com.food.order.system.domain.entity.Restaurant;
import java.util.Optional;
public interface RestaurantRepository {
Optional<Restaurant> findRestaurantInformation(Restaurant restaurant);
}