Resilient Notification Dispatcher with Provider Fallback

30:00

1. Studi Kasus

Dalam sistem pengiriman email transaksi (OTP / Invoice), keandalan layanan adalah hal utama. Aplikasi harus mencoba mengirimkan email via Primary Provider (SendGrid). Jika SendGrid mengalami error (misal maintenance/downtime), sistem harus otomatis fallback ke Secondary Provider (Mailgun) secara transparan.

Endpoint:

POST /notifications/send

2. Spesifikasi Input & Output

Request Body:

{
  "to": "user@example.com",
  "subject": "Kode OTP Anda",
  "body": "Kode OTP: 492019",
  "forcePrimaryError": false
}

Response Berhasil (HTTP 200):

{
  "status": "SENT",
  "provider": "SendGrid",
  "messageId": "MSG_SG_1002"
}

3. Requirement & Aturan Validasi

  1. Validasi Payload: Jika to, subject, atau body kosong → HTTP 400 "Missing required email fields".
  2. Logika Dispatch Primary (SendGrid):
    • Jika forcePrimaryError === true (simulasi SendGrid down), gagal dengan error 500 dan masuk ke fallback.
    • Jika normal, kirim via SendGrid → HTTP 200 dengan { status: "SENT", provider: "SendGrid", messageId: "SG_" + Date.now() }.
  3. Logika Fallback Secondary (Mailgun):
    • Jika Primary gagal, eksekusi pengiriman via Mailgun → HTTP 200 dengan { status: "SENT", provider: "Mailgun", messageId: "MG_" + Date.now() }.
    • Jika kedua provider dipaksa gagal (forcePrimaryError === true & forceSecondaryError === true), kembalikan HTTP 503 "All email providers unavailable".

4. Pertanyaan Bonus Konseptual 💡

Pola Circuit Breaker pada Microservices Di bagian komentar kode solusi Anda, jelaskan 3 status Circuit Breaker (CLOSED, OPEN, HALF-OPEN) untuk mengisolasi kegagalan service dependen.

solution.js
Loading...
Local Test Console