32 lines
1.8 KiB
Markdown
32 lines
1.8 KiB
Markdown
# Phase 05 — BNPL doesn't work at all
|
||
|
||
**Blocker:** blockers.md § "Payments" (installments).
|
||
**Depends on:** nothing. Two distinct bugs, both small.
|
||
|
||
---
|
||
|
||
## Bug A — server-side: no active BNPL gateway is ever seeded
|
||
|
||
`SeedPaymentGatewaysAsync` (`ServiceCollectionExtensions.cs:135-154`) seeds exactly
|
||
one `PaymentGatewayType.Standard` (card) gateway row — **never** a `PaymentGatewayType.Bnpl` row.
|
||
`CheckBnplEligibilityQuery.Handler.cs:45-47` and `InitiateBnplOrderCommand.Handler.cs:42-44` both short-circuit
|
||
with "No active BNPL gateway is configured" **before** ever calling `IBnplProvider` (mock or real — both are
|
||
correctly registered, just unreached).
|
||
|
||
**Fix:** extend `SeedPaymentGatewaysAsync` (or add a sibling seeder called next to it in `Program.cs:137,156`)
|
||
to idempotently insert a `PaymentGatewayType.Bnpl` row (`ProviderCode="balinyaar"`, the in-house net-of-fee
|
||
provider per `archive/docs/rules/server/money.md` §6 — needs no external credentials), same
|
||
`AnyAsync(...)` idempotency guard as the existing seeder.
|
||
|
||
## Bug B — client-side: still fully mocked, and the mock itself is broken
|
||
|
||
`client/src/services/bnpl/constants.ts:18` — `USE_BNPL_MOCK = true`, never flipped.
|
||
Even as a demo the mock is broken: `client/.../bnpl/apis/mockApi.ts:5-8` imports directly from the retired
|
||
`bookingRequests` mock store, bypassing that domain's own (real) seam — so any real booking-request id 404s
|
||
inside the BNPL mock. That store only ever seeds ids `1`/`2`, which age out to `expired_no_response` almost
|
||
immediately, so the D1–D5 wizard is practically unreachable today regardless.
|
||
|
||
**Fix:** once Bug A lands, flip `USE_BNPL_MOCK` to `false` — the real `CheckoutBnplController` endpoints are
|
||
otherwise complete. The mock's cross-import isn't worth fixing in isolation; it becomes moot once the flag
|
||
flips.
|