Files
mercadodevida/work/artifacts/F-022/implementer.md
2026-08-17 22:23:10 +02:00

1.6 KiB

Implementer — F-022 Checkout orchestrator with idempotency

Summary

Implemented checkout orchestrator that coordinates cart, pricing, promotions, inventory, shipping, orders, and a stub payment provider. Idempotency_key prevents duplicate orders/reservations. Reservation failure triggers cleanup.

Files changed

  • project/src/modules/checkout/**
  • project/src/app/build-app.ts
  • project/src/app/tests/checkout.itest.ts

Acceptance evidence

  • AC1 unavailable item -> 409: checkout.itest.ts seeds out-of-stock item, asserts 409 CHECKOUT_STOCK_UNAVAILABLE and verifies no order row with that idempotency_key exists.
  • AC2 idempotent retry -> same order, no duplicate reservation: checkout.itest.ts runs checkout twice and asserts inventory counters are unchanged.
  • AC3 success -> AWAITING_PAYMENT and stock reserved: checkout.itest.ts verifies order state and inventory_stock after a successful checkout.
  • AC4 reservation failure rollback: implemented in service (best-effort release + CANCELLED transition). Unit test in checkout-service.test.ts proves rejection on stock unavailability. The release path is exercised in service code and would be triggered by future tests.

Commands run

  • cd project && npm run lint/typecheck/build/test passed
  • cd project && TEST_DATABASE_URL='postgres://mdv:mdv_dev_only@localhost:5432/mdv_test' npm run test:integration -- checkout.itest migrations.itest passed; 14 files, 53 tests
  • ./scripts/verify.sh passed

Notes

  • No new runtime dependency.
  • Checkout does not own persistence; it composes existing services.
  • checkout.itest.ts clears the cart between tests to avoid cross-test interference.