flowchart TD
A[Order] --> B(new Order)
B --> |event| C(OrderCreatedEvent)
B --> |event| D(OrderPaidEvent)
B --> |persist|G
C --> E
D --> E
F[Database]
E(DomainEvents)
G(Repository)
E --> |persist events|G
G --> |Dispatch events| E
G --> F
- Criar uma
Order
; - Criar um evento respectivo a sua ação;
- Salvar em banco de dados (Repositórios);
- Disparar
DomainEvents
com oid
da entidade;
// src/infra/index.ts
// Subscriber
DomainEvents.registerSubscriber(OrderCreatedEvent.name, (order) => {
console.log("order event", order);
});
// Subscriber
DomainEvents.registerSubscriber(OrderPaidEvent.name, (order) => {
console.log("paid event", order);
});
// Publisher
const order = Order.create({
customerId: "customer_id",
productId: "product_id",
amountInCents: 1000,
status: "pending",
createdAt: new Date(),
});
order.pay();
// Dentro da camada de persistência (repositório)
// Finalização do processo de venda
DomainEvents.dispatchEventsForEntity(order.id);