[PK-60] BE+FE: PayBySquareError → 503 payment_misconfigured + FE fallback #25

Open
forge-admin wants to merge 1 commit from agent/be-dev/b3ee7b4e into main
Owner

Súhrn

Defenzívne mapovanie BE↔FE pre prípad, keď QR sa nedá vygenerovať kvôli zlej konfigurácii (napr. invalid IBAN cez .env).

BE

  • app/api/orders/[id]/payment-qr/route.ts: PayBySquareError503 { error: "payment_misconfigured", code, message }. 500 zostáva len pre skutočné internal failures (DB výpadok, nečakaná výnimka).
  • Log riadok pre tento prípad je pay_by_square_misconfigured (s code a order_id).

FE

  • fe/src/lib/api.ts: getPaymentQr rozlišuje 503 podľa body.error:
    • payment_misconfiguredkind: "misconfigured" (s code)
    • inak → kind: "not_configured" (back-compat pre prípad chýbajúceho PAYMENT_IBAN).
  • fe/src/components/order/PaymentQrCard.tsx: nový PaymentMisconfiguredCard (VS + kontakt +421 903 400 326). PaymentNotConfiguredCard ponechaný.
  • fe/src/app/objednavka/[id]/page.tsx: branch pre misconfigured. showQrSection netreba meniť (už zobrazoval všetko, čo nie je unavailable).

Testy

  • be/tests/payment-qr-route.test.ts: 2 nové prípady — invalid_iban aj invalid_variable_symbol503 payment_misconfigured + code v tele. Plus uistenie, že generický Error stále vracia 500/internal_error.
  • Celá BE test suite: 202/202 pass. FE typecheck + lint: clean.

API kontrakt

Pred: GET /api/orders/:id/payment-qr na config error → 500 { error: "invalid_iban", message: "..." }

Po: GET /api/orders/:id/payment-qr na config error → 503 { error: "payment_misconfigured", code: "invalid_iban", message: "..." }

FE prijíma oba a renderuje fallback. Žiadny iný klient na endpoint nesiaha.

Test plan

  • npm test v be/ (202 testov)
  • npm run typecheck + npm run lint v fe/
  • Manual smoke: invalid IBAN v .env/objednavka/<id> musí ukázať PaymentMisconfiguredCard (nie biele miesto)

Closes PK-60.

## Súhrn Defenzívne mapovanie BE↔FE pre prípad, keď QR sa nedá vygenerovať kvôli zlej konfigurácii (napr. invalid IBAN cez `.env`). ### BE - `app/api/orders/[id]/payment-qr/route.ts`: `PayBySquareError` → `503 { error: "payment_misconfigured", code, message }`. `500` zostáva len pre skutočné internal failures (DB výpadok, nečakaná výnimka). - Log riadok pre tento prípad je `pay_by_square_misconfigured` (s `code` a `order_id`). ### FE - `fe/src/lib/api.ts`: `getPaymentQr` rozlišuje 503 podľa `body.error`: - `payment_misconfigured` → `kind: "misconfigured"` (s `code`) - inak → `kind: "not_configured"` (back-compat pre prípad chýbajúceho `PAYMENT_IBAN`). - `fe/src/components/order/PaymentQrCard.tsx`: nový `PaymentMisconfiguredCard` (VS + kontakt +421 903 400 326). `PaymentNotConfiguredCard` ponechaný. - `fe/src/app/objednavka/[id]/page.tsx`: branch pre `misconfigured`. `showQrSection` netreba meniť (už zobrazoval všetko, čo nie je `unavailable`). ### Testy - `be/tests/payment-qr-route.test.ts`: 2 nové prípady — `invalid_iban` aj `invalid_variable_symbol` → `503 payment_misconfigured` + `code` v tele. Plus uistenie, že generický `Error` stále vracia `500`/`internal_error`. - Celá BE test suite: 202/202 pass. FE typecheck + lint: clean. ## API kontrakt **Pred:** `GET /api/orders/:id/payment-qr` na config error → `500 { error: "invalid_iban", message: "..." }` **Po:** `GET /api/orders/:id/payment-qr` na config error → `503 { error: "payment_misconfigured", code: "invalid_iban", message: "..." }` FE prijíma oba a renderuje fallback. Žiadny iný klient na endpoint nesiaha. ## Test plan - [x] `npm test` v `be/` (202 testov) - [x] `npm run typecheck` + `npm run lint` v `fe/` - [ ] Manual smoke: invalid IBAN v `.env` → `/objednavka/<id>` musí ukázať `PaymentMisconfiguredCard` (nie biele miesto) Closes [PK-60](https://multica.kokpit.sk/issues/b8fd58f5-e196-47ea-8e20-7a4217e69b62).
BE app/api/orders/[id]/payment-qr/route.ts mapuje PayBySquareError na
503 { error: "payment_misconfigured", code, message } namiesto generického
500. 500 zostáva pre skutočné internal failures.

FE getPaymentQr rozlišuje 503 podľa body.error: payment_misconfigured →
kind: "misconfigured", inak kind: "not_configured". Stránka objednávky
renderuje nový PaymentMisconfiguredCard (VS + kontakt +421 903 400 326),
takže UI už pri config bugu (napr. invalid IBAN cez .env) nezostane tiché.

Testy: rozšírený be/tests/payment-qr-route.test.ts pre invalid_iban a
ďalší PayBySquareError kód.

Co-authored-by: multica-agent <github@multica.ai>
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin agent/be-dev/b3ee7b4e:agent/be-dev/b3ee7b4e
git switch agent/be-dev/b3ee7b4e
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forge-admin/masox-eshop!25
No description provided.