Çalışma Prensibi
- İstemci, Ingress üzerinden POST /orders isteği gönderir:

- Order Service, Order Database’de bekleyen (pending) bir sipariş oluşturur:

- Order Service, RabbitMQ’ya bir “Check Credit” (Kredi Kontrolü) olayı yayınlar:

- RabbitMQ, “Check Credit” olayını User Service’e iletir:

- User Service, User Database’de kredi kullanılabilirliğini kontrol eder:

Eğer kredi yetersizse:
- User Service, RabbitMQ’ya bir “Credit Unavailable” (Kredi Yetersiz) olayı yayınlar:

- RabbitMQ, “Credit Unavailable” olayını Order Service’e iletir:

- Order Service, Order Database’de siparişin durumunu “Cancelled” (İptal Edildi) olarak günceller:

- Order Service, RabbitMQ’ya bir “Order Cancelled” (Sipariş İptal Edildi) olayı yayınlar:

- RabbitMQ, “Order Cancelled” olayını User Service’e iletir:

- User Service, User Database’de ayrılan krediyi serbest bırakır:

- Order Service, Ingress üzerinden “Credit Unavailable - Order Cancelled” yanıtını döndürür:

- Ingress, yanıtı İstemciye iletir:

Eğer kredi yeterliyse:
- User Service, User Database’de krediyi ayırır:

- User Service, RabbitMQ’ya bir “Credit Reserved” (Kredi Ayrıldı) olayı yayınlar:

- RabbitMQ, “Credit Reserved” olayını Order Service’e iletir:

- Order Service, RabbitMQ’ya bir “Check Stock” (Stok Kontrolü) olayı yayınlar:

- RabbitMQ, “Check Stock” olayını Product Service’e iletir:

- Product Service, Product Database’de stok kullanılabilirliğini kontrol eder:

Eğer stok mevcutsa:
- Product Service, Product Database’de stoku ayırır:

- Product Service, RabbitMQ’ya bir “Stock Reserved” (Stok Ayrıldı) olayı yayınlar:

- RabbitMQ, “Stock Reserved” olayını Order Service’e iletir:

- Order Service, Order Database’de siparişin durumunu “Processing Payment” (Ödeme İşleniyor) olarak günceller:

- Order Service, RabbitMQ’ya bir “Process Payment” (Ödeme İşleme) olayı yayınlar:

- RabbitMQ, “Process Payment” olayını Order Service’e iletir:

- Order Service, Order Database’de siparişin durumunu “Payment Processed” (Ödeme İşlendi) olarak günceller:

- Order Service, RabbitMQ’ya bir “Payment Processed” olayı yayınlar:

- RabbitMQ, “Payment Processed” olayını Dispatch Service’e iletir:

- Dispatch Service, Dispatch Database’de bir sevkiyat kaydı oluşturur:

- Dispatch Service, RabbitMQ’ya bir “Order Dispatched” (Sipariş Gönderildi) olayı yayınlar:

- RabbitMQ, “Order Dispatched” olayını Order Service’e iletir:

- Order Service, Order Database’de siparişin durumunu “Completed” (Tamamlandı) olarak günceller:

- Order Service, RabbitMQ’ya bir “Order Completed” (Sipariş Tamamlandı) olayı yayınlar:

- RabbitMQ, “Order Completed” olayını Product Service’e iletir:

- Product Service, Product Database’de stok seviyelerini günceller:

- Order Service, Ingress üzerinden siparişin tamamlandığı yanıtını döndürür:

- Ingress, yanıtı İstemciye iletir:

Eğer stok yetersizse:
- Product Service, RabbitMQ’ya bir “Stock Unavailable” (Stok Yetersiz) olayı yayınlar:

- RabbitMQ, “Stock Unavailable” olayını Order Service’e iletir:

- Order Service, Order Database’de siparişin durumunu “Cancelled” (İptal Edildi) olarak günceller:

- Order Service, RabbitMQ’ya bir “Order Cancelled” (Sipariş İptal Edildi) olayı yayınlar:

- RabbitMQ, “Order Cancelled” olayını User Service’e iletir:

- User Service, User Database’de ayrılan krediyi serbest bırakır:

- Order Service, Ingress üzerinden “Stock Unavailable - Order Cancelled” yanıtını döndürür:

- Ingress, yanıtı İstemciye iletir:

Tüm yapı ise aşağıdadır :
