Add Message Publisher Layer With AOP

This commit is contained in:
Ali CANLI
2022-07-10 13:41:52 +03:00
parent 1c950f3e45
commit 798bc9fc47
3 changed files with 57 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
package com.food.order.domain;
import com.food.order.domain.event.publisher.DomainEventPublisher;
import com.food.order.system.domain.event.OrderCreatedEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@RequiredArgsConstructor
public class ApplicationDomainEventPublisher implements
ApplicationContextAware,
DomainEventPublisher<OrderCreatedEvent> {
private final ApplicationEventPublisher applicationEventPublisher;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
}
@Override
public void publish(OrderCreatedEvent event) {
this.applicationEventPublisher.publishEvent(event);
log.info("publish order created event with id : {}", event.getOrder().getId().getValue());
}
}

View File

@@ -29,6 +29,8 @@ public class OrderCreateCommandHandler {
private final RestaurantRepository restaurantRepository;
private final OrderDataMapper orderDataMapper;
private final ApplicationDomainEventPublisher applicationDomainEventPublisher;
@Transactional
public CreateOrderResponse createOrder(CreateOrderCommand createOrderCommand) {
log.info("createOrder: {}", createOrderCommand);
@@ -38,6 +40,7 @@ public class OrderCreateCommandHandler {
var createdEventOrder = orderDomainService.validateAndInitiateOrder(order, restaurant);
var savedOrder = saveOrder(order);
log.info("createOrder with id: {}", savedOrder.getId().getValue());
applicationDomainEventPublisher.publish(createdEventOrder);
return orderDataMapper.orderToCreateOrderResponse(savedOrder,"Order created successfully");
}

View File

@@ -0,0 +1,22 @@
package com.food.order.domain;
import com.food.order.domain.ports.output.message.publisher.payment.OrderCreatedPaymentRequestMessagePublisher;
import com.food.order.system.domain.event.OrderCreatedEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@Slf4j
@Component
@RequiredArgsConstructor
public class OrderCreatedEventApplicationListener {
private final OrderCreatedPaymentRequestMessagePublisher orderCreatedPaymentRequestMessagePublisher;
@TransactionalEventListener
public void process(OrderCreatedEvent event) {
orderCreatedPaymentRequestMessagePublisher.publish(event);
}
}