Siklus Pembayaran
Endpoint
Section titled “Endpoint”POST /api/v1/admin/payments{ "method": "cash" | "qris" | "transfer", "amount": 94000, "orderId": "..." }→ Payment aggregate dibuat (status: created)POST /api/v1/admin/payments/:id{ "type": "confirm" | "provider_settled" | "provider_declined" | "provider_ambiguous", "commandId": "..." }→ State machine transitionLifecycle
Section titled “Lifecycle”cash: created → confirm → settledqris: created → confirm → pending → provider_settled → settled (atau provider_declined → declined)Detail teknis
Section titled “Detail teknis”- Event store:
payment_events(initiate, confirm, provider_settled). - Idempotent:
commandIdper transition (idempotency key tenant-scoped). - Provider: Midtrans Snap API — adapter
MidtransPaymentAdapterLive(infra/adapters/midtrans.adapter.ts) ter-wire; gateway call E2E membutuhkan server key valid (item v1.1).