[PK-62] BE: WAL + busy_timeout + 20s tx timeout pre súbežný checkout #21

Merged
forge-admin merged 2 commits from feature/pk-62-checkout-tx-timeout-sqlite-busy into main 2026-05-17 04:11:01 +00:00
Owner

Fix Prisma $transaction 5s default timeout pri 8 súbežných checkout requestoch (vitest tests/checkout.test.ts:378). WAL mode + busy_timeout + zvýšený tx timeout na 20s.

Closes PK-62.

Fix Prisma `$transaction` 5s default timeout pri 8 súbežných checkout requestoch (vitest `tests/checkout.test.ts:378`). WAL mode + busy_timeout + zvýšený tx timeout na 20s. Closes [PK-62](mention://issue/b7afa96d-e6e5-4899-a5cd-1c9d86697e7c).
SQLite serializuje zápisy, takže 8 paralelných POST /api/checkout zhltlo
default 5 s Prisma transaction timeout (P2028 → HTTP 500). Riešime:

- lib/db.ts: pri inicializácii PrismaClienta aplikujeme PRAGMA
  journal_mode=WAL a PRAGMA busy_timeout=15000. WAL zlepšuje súbežný
  reader/writer, busy_timeout núti SQLite čakať v drivere namiesto okamžitého
  SQLITE_BUSY. Export prismaReady umožní routám počkať na pragma init.
- app/api/checkout/route.ts: $transaction { timeout: 20000, maxWait: 15000 }
  spolu s await prismaReady pred otvorením transakcie.
- tests/helpers/db.ts: rovnaké PRAGMA aplikované na test klient cez resetCatalog.

API kontrakt sa nemení (checkout response shape, status kódy, errory zostávajú).

Verifikácia: tests/checkout.test.ts 13/13 zelených, celá vitest suite 198/198.

Co-authored-by: multica-agent <github@multica.ai>
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!21
No description provided.