2.2 KiB
2.2 KiB
Implementer — F-016 Inventory module
Summary
Implemented an isolated inventory module with atomic stock counters, public InventoryService, PostgreSQL persistence, API routes, migration, and regression tests.
Files changed
project/migrations/011_inventory.jsproject/src/app/build-app.tsproject/src/app/tests/inventory.itest.tsproject/src/modules/inventory/index.tsproject/src/modules/inventory/api/inventory.routes.tsproject/src/modules/inventory/application/inventory-service.tsproject/src/modules/inventory/domain/errors.tsproject/src/modules/inventory/domain/ports.tsproject/src/modules/inventory/domain/stock.tsproject/src/modules/inventory/infrastructure/pg-inventory-repository.tsproject/src/modules/inventory/tests/boundary.test.tsproject/src/modules/inventory/tests/inventory-service.test.ts
Acceptance evidence
- AC1 concurrent last-unit reservation:
project/src/app/tests/inventory.itest.tscovers 10 concurrent reservations; exactly one succeeds when DB integration tests are enabled. - AC2 zero-stock reservation:
project/src/app/tests/inventory.itest.tscovers rejection and non-negative counters; DB CHECK constraints also enforce non-negative stock. - AC3 catalog isolation:
project/src/modules/inventory/tests/boundary.test.tsscans catalog source for inventory table/import coupling. - AC4 checkout service dependency:
project/src/modules/inventory/index.tsexports the publicInventoryServicePortandInventoryServicefor future checkout injection. verify.sh: passed.
Commands run
cd project && npm run typecheck— passedcd project && npm test— passed; DB integration tests skipped becauseTEST_DATABASE_URLis not setcd project && npm run build— passedcd project && npx prettier --write ...— formatted inventory filescd project && npm run lint— passed./scripts/verify.sh— passed
Notes
- No new runtime dependency was added.
- Reservation correctness uses a single predicate
UPDATE ... WHERE available >= quantity, not application read-before-write. - Product/variant ids are opaque UUIDs to keep inventory independent from catalog internals.