PaymentStore adalah kontrak persistence pembayaran aktif. MerchantId menyertakan InMemoryPaymentStore untuk pengembangan dan satu proses; deployment multi-instance harus menyediakan store tahan lama.
Kontrak
listActive mengembalikan semua pembayaran yang masih menempati slot nominal unik. Implementasi harus menerapkan scope bila diberikan; PaymentService juga memfilter defensif saat store kustom mengembalikan record dari scope lain.
InMemoryPaymentStore
Default bila Anda tidak menyediakanstore.
InMemoryPaymentStore hanya cocok untuk test atau satu proses. State, karantina nominal, dan ingatan transaksi yang sudah dipakai tidak dapat mengoordinasikan beberapa proses. Deployment multi-instance harus memindahkan jaminan itu ke penyimpanan tahan lama.
Store production
Sediakan implementasi Anda sendiri lewatstore pada config provider.
- Menyimpan
payment.scopetanpa menghapus field. - Memfilter
listActive(scope)secara benar. - Menegakkan keunikan nominal aktif per scope secara atomik - misalnya unique constraint pada
scope + uniqueAmountuntuk baris pending. - Mencegah transisi terminal ditimpa proses lain.
- Menyimpan klaim transaksi atau jaminan ekuivalen bila proses dapat restart.
Scope dan record tanpa scope
PaymentService beroperasi dalam salah satu dari dua mode:
- Scoped (dipakai facade provider): hanya memproses pembayaran dengan scope yang sama, dan fail-fast bila store memiliki payment aktif tanpa scope. Record tanpa scope ambigu dan tidak boleh diklaim feed provider.
- Unscoped (pemakaian
PaymentServicelangsung tanpa scope): hanya memproses pembayaran tanpascope.