文章目录
Orders Service Events
创建 Events
// common/src/events/order-created-event.ts
import { Subjects } from './subjects';
import { OrderStatus } from './types/order-status';
export interface OrderCreatedEvent {
subject: Subjects.OrderCreated;
data: {
id: string;
status: OrderStatus;
userId: string;
expiresAt: string;
ticket: {
id: string;
price: number;
};
};
}
// section-18/ticketing/common/src/events/order-cancelled-event.ts
import { Subjects } from './subjects';
export interface OrderCancelledEvent {
subject: Subjects.OrderCancelled;
data: {
id: string;
ticket: {
id: string;
};
};
}
实现 Publishers
// orders/src/events/publishers/order-created-publisher.ts
import { Publisher, OrderCreatedEvent, Subjects } from '@heysirius-common/common';
export class OrderCreatedPublisher extends Publisher<OrderCreatedEvent> {
subject: Subjects.OrderCreated = Subjects.OrderCreated;
}
// orders/src/events/publishers/order-cancelled-publisher.ts
import { Subjects, Publisher, OrderCancelledEvent } from '@heysirius-common/common';
export class OrderCancelledPublisher extends Publisher<OrderCancelledEvent> {
subject: Subjects.OrderCancelled = Subjects.OrderCancelled;
}
Publishing Order Creation Event
// orders/src/routes/new.ts
// Publish an event saying that an order was created
new OrderCreatedPublisher(natsWrapper.client).publish({
id: order.id,
status: order.status,
userId: order.userId,
expiresAt: order.expiresAt.toISOString(),
ticket: {
id: ticket.id,
price: ticket.price,
},
});
Publishing Order Cancellation Event
// orders/src/routes/delete.ts
// publishing an event saying this was cancelled!
new OrderCancelledPublisher(natsWrapper.client).publish({
id: order.id,
ticket: {
id: order.ticket.id,
},
});