API Events
Bề mặt async duy nhất của Pricing là một topic CDC Debezium inbound. Nó không có sự kiện domain outbound, không BullMQ, và không WebSocket. Kafka producer được bind bởi
ApplicationKafkaComponentnhưng hiện không domain logic nào publish tới nó.
1. Inbound — Kafka
| Topic | Producer | Handler | Idempotency Key | Failure Mode |
|---|---|---|---|---|
CDCKafkaTopics.PRODUCT_VARIANT | Debezium (CDC DB commerce) | PricingWorkerService.handleProductVariantCDC | (productVariantId) — bỏ qua nếu FareSet tồn tại; FBT bỏ qua theo (relatedFareSetId, leadVariantId) | autocommit: false — offset commit chỉ sau khi handler thành công; throw chặn commit và re-deliver |
Config consumer (src/components/kafka/component.ts): groupId PRICING_CONSUMER_GROUP (override được qua env), fallbackMode: 'latest', commit thủ công sau mỗi message.
Op xử lý: chỉ DebeziumPayloadOperators.CREATE và RETRIEVE. UPDATE / DELETE là no-op. Payload đã xoá (deletedAt đặt) bị bỏ qua.
2. Outbound — Kafka
Không. Producer helper được bind (BindingKeys.APPLICATION_KAFKA_PRODUCER, idempotent + lz4 + acks=ALL) nhưng không service nào emit. Dành cho sự kiện thay đổi giá tương lai.
3. Inbound — BullMQ
Không. Pricing không mount QueueComponent / BullMQ.
4. Outbound — BullMQ
Không.
5. WebSocket Emissions
Không. Pricing không mount component WebSocket.
6. Payload Schemas
Message inbound là một envelope Debezium trên một hàng ProductVariant. Pricing chỉ đọc metadata:
// TDebeziumMessage<TProductVariantPgRow> — phần liên quan
interface ProductVariantMetadata {
pricing?: {
sellingPrice?: string; // seed amount default SALE fare
};
referenceId?: string; // deep-copy cấu trúc FareSet của variant này
bundlers?: Array<{
type: string; // ProductBundlerTypes.FBT trigger seed override
relatedProductVariantId: string; // FareSet nhận override child
basis?: string; // ProductBundlerBasises.FIXED | PER_UNIT (khác bị bỏ)
basisValue?: string;
quantity?: string;
}>;
}Nguồn sự thật cho kiểu payload là
@nx/core(TProductVariantPgRow,TProductVariantMetadata) — pricing không định nghĩa schema message riêng.
7. Idempotency & Thứ tự
| Topic | Delivery | Thứ tự | Phục hồi |
|---|---|---|---|
PRODUCT_VARIANT | at-least-once (commit thủ công) | theo partition (Debezium khoá theo PK) | Handler idempotent — replay/redelivery re-check FareSet/FBT override hiện có và bỏ qua |