Add payment domain and data access modules
This commit is contained in:
@@ -5,10 +5,10 @@ logging:
|
||||
com.food.order.system : DEBUG
|
||||
|
||||
order-service:
|
||||
payment-request-topic-name: payment-request
|
||||
payment-response-topic-name: payment-response
|
||||
restaurant-approval-request-topic-name: restaurant-approval-request
|
||||
restaurant-approval-response-topic-name: restaurant-approval-response
|
||||
payment-request-topic-name: payment-request-value
|
||||
payment-response-topic-name: payment-response-value
|
||||
restaurant-approval-request-topic-name: restaurant-approval-request-value
|
||||
restaurant-approval-response-topic-name: restaurant-approval-response-value
|
||||
|
||||
spring:
|
||||
jpa:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user