graph LR
classDef yellow fill:#FFFDE7,stroke:#1A1A1A,stroke-width:2px;
classDef blue fill:#E3F2FD,stroke:#1A1A1A,stroke-width:2px;
classDef green fill:#E8F5E9,stroke:#1A1A1A,stroke-width:2px;
classDef purple fill:#F3E5F5,stroke:#1A1A1A,stroke-width:2px;
classDef teal fill:#E0F7FA,stroke:#1A1A1A,stroke-width:2px;
classDef orange fill:#FFF3E0,stroke:#1A1A1A,stroke-width:2px;
classDef note fill:#FFF9C4,stroke:#FBC02D,stroke-dasharray:4;
subgraph Producers ["Event Producers"]
OrderSvc[Order Service]:::yellow
PaymentSvc[Payment Service]:::yellow
UserSvc[User Service]:::yellow
end
subgraph Bus ["Event Bus — Kafka"]
OrderTopic[orders]:::orange
PaymentTopic[payments]:::orange
UserTopic[users]:::orange
end
subgraph Consumers ["Event Consumers"]
NotifSvc[Notification Service]:::blue
InventorySvc[Inventory Service]:::blue
AnalyticsSvc[Analytics Service]:::blue
SearchSvc[Search Indexer]:::blue
end
subgraph Storage ["Storage"]
DB[(PostgreSQL)]:::green
Cache[(Redis)]:::teal
SearchIdx[(Elasticsearch)]:::green
end
OrderSvc --> OrderTopic
PaymentSvc --> PaymentTopic
UserSvc --> UserTopic
OrderTopic --> NotifSvc & InventorySvc & AnalyticsSvc
PaymentTopic --> NotifSvc & AnalyticsSvc
UserTopic --> NotifSvc & SearchSvc
NotifSvc --> Cache
InventorySvc --> DB
AnalyticsSvc --> DB
SearchSvc --> SearchIdx