Add payment domain and data access modules

This commit is contained in:
Ali CANLI
2022-07-13 12:49:02 +03:00
parent 2071a3dd86
commit ef9c18bfbd
66 changed files with 1551 additions and 49 deletions

View File

@@ -1,6 +1,7 @@
package com.food.order.sysyem;
import com.food.order.sysyem.dto.create.CreateOrderCommand;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
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;
@@ -27,6 +28,7 @@ public class OrderCreateHelper {
private final CustomerRepository customerRepository;
private final RestaurantRepository restaurantRepository;
private final OrderDataMapper orderDataMapper;
private final DomainEventPublisher<OrderCreatedEvent> publisher;
@Transactional
public OrderCreatedEvent persistOrder(CreateOrderCommand createOrderCommand) {
@@ -34,7 +36,7 @@ public class OrderCreateHelper {
checkCustomer(createOrderCommand.customerId());
Restaurant restaurant = checkRestaurant(createOrderCommand);
var order = orderDataMapper.createOrderCommandToOrder(createOrderCommand);
var createdEventOrder = orderDomainService.validateAndInitiateOrder(order, restaurant);
var createdEventOrder = orderDomainService.validateAndInitiateOrder(order, restaurant,publisher);
saveOrder(order);
log.info("Created Order Event : {}", createdEventOrder);
return createdEventOrder;

View File

@@ -1,12 +1,22 @@
package com.food.order.system.domain.event;
import com.food.order.system.domain.entity.Order;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import java.time.ZonedDateTime;
public class OrderCancelledEvent extends OrderEvent {
public OrderCancelledEvent(Order order, ZonedDateTime utc) {
private final DomainEventPublisher<OrderCancelledEvent> publisher;
public OrderCancelledEvent(Order order, ZonedDateTime utc, DomainEventPublisher<OrderCancelledEvent> publisher) {
super(order, utc);
this.publisher = publisher;
}
@Override
public void fire() {
publisher.publish(this);
}
}

View File

@@ -1,11 +1,20 @@
package com.food.order.system.domain.event;
import com.food.order.system.domain.entity.Order;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import java.time.ZonedDateTime;
public class OrderCreatedEvent extends OrderEvent {
public OrderCreatedEvent(Order order, ZonedDateTime createdAt) {
private final DomainEventPublisher<OrderCreatedEvent> publisher;
public OrderCreatedEvent(Order order, ZonedDateTime createdAt, DomainEventPublisher<OrderCreatedEvent> publisher) {
super(order, createdAt);
this.publisher = publisher;
}
@Override
public void fire() {
publisher.publish(this);
}
}

View File

@@ -1,13 +1,21 @@
package com.food.order.system.domain.event;
import com.food.order.system.domain.entity.Order;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import java.time.ZonedDateTime;
public class OrderPaidEvent extends OrderEvent {
public OrderPaidEvent(Order order, ZonedDateTime utc) {
private final DomainEventPublisher<OrderPaidEvent> publisher;
public OrderPaidEvent(Order order, ZonedDateTime utc, DomainEventPublisher<OrderPaidEvent> publisher) {
super(order, utc);
this.publisher = publisher;
}
@Override
public void fire() {
publisher.publish(this);
}
}

View File

@@ -5,18 +5,19 @@ import com.food.order.system.domain.entity.Restaurant;
import com.food.order.system.domain.event.OrderCancelledEvent;
import com.food.order.system.domain.event.OrderCreatedEvent;
import com.food.order.system.domain.event.OrderPaidEvent;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import java.util.List;
public interface OrderDomainService {
OrderCreatedEvent validateAndInitiateOrder(Order order, Restaurant restaurant);
OrderCreatedEvent validateAndInitiateOrder(Order order, Restaurant restaurant, DomainEventPublisher<OrderCreatedEvent> publisher);
OrderPaidEvent payOrder(Order order);
OrderPaidEvent payOrder(Order order,DomainEventPublisher<OrderPaidEvent> publisher);
void approve(Order order);
OrderCancelledEvent cancelOrderPayment(Order order, List<String> failureMessages);
OrderCancelledEvent cancelOrderPayment(Order order, List<String> failureMessages,DomainEventPublisher<OrderCancelledEvent> publisher);
void cancelOrder(Order order, List<String> failureMessages);

View File

@@ -7,6 +7,7 @@ import com.food.order.system.domain.event.OrderCreatedEvent;
import com.food.order.system.domain.event.OrderPaidEvent;
import com.food.order.system.domain.exception.OrderDomainException;
import com.food.order.system.domain.service.OrderDomainService;
import com.food.order.sysyem.event.publisher.DomainEventPublisher;
import lombok.extern.slf4j.Slf4j;
import java.time.ZoneId;
@@ -19,13 +20,14 @@ public class OrderDomainServiceImpl implements OrderDomainService {
private static final String UTC = "UTC";
@Override
public OrderCreatedEvent validateAndInitiateOrder(Order order, Restaurant restaurant) {
public OrderCreatedEvent validateAndInitiateOrder(Order order, Restaurant restaurant,
DomainEventPublisher<OrderCreatedEvent> publisher) {
validateRestaurant(restaurant);
setOrderProductInformation(order,restaurant);
order.validateOrder();
order.initializeOrder();
log.info("Order with id {} initialize successfully", order.getId().getValue());
return new OrderCreatedEvent(order, ZonedDateTime.now(ZoneId.of(UTC)));
return new OrderCreatedEvent(order, ZonedDateTime.now(ZoneId.of(UTC)),publisher);
}
private void setOrderProductInformation(Order order, Restaurant restaurant) {
@@ -46,10 +48,10 @@ public class OrderDomainServiceImpl implements OrderDomainService {
}
@Override
public OrderPaidEvent payOrder(Order order) {
public OrderPaidEvent payOrder(Order order, DomainEventPublisher<OrderPaidEvent> publisher) {
order.pay();
log.info("Order with id {} paid successfully", order.getId().getValue());
return new OrderPaidEvent(order, ZonedDateTime.now(ZoneId.of(UTC)));
return new OrderPaidEvent(order, ZonedDateTime.now(ZoneId.of(UTC)),publisher);
}
@Override
@@ -59,10 +61,11 @@ public class OrderDomainServiceImpl implements OrderDomainService {
}
@Override
public OrderCancelledEvent cancelOrderPayment(Order order, List<String> failureMessages) {
public OrderCancelledEvent cancelOrderPayment(Order order, List<String> failureMessages,
DomainEventPublisher<OrderCancelledEvent> publisher) {
order.initCancel(failureMessages);
log.info("Order with id {} cancelled successfully", order.getId().getValue());
return new OrderCancelledEvent(order, ZonedDateTime.now(ZoneId.of(UTC)));
return new OrderCancelledEvent(order, ZonedDateTime.now(ZoneId.of(UTC)),publisher);
}
@Override