GET /slots/availability, POST /slots/{id}/hold, POST /holds/{id}/confirm
and DELETE /holds/{id} on Laravel 12 and MySQL 8.
- availability cached for 10s behind a single-flight lock with a stale
copy, invalidated after commit on confirm and cancel
- oversell prevented by a conditional decrement, verified by the number
of affected rows rather than a preceding select
- idempotency enforced by a unique index on holds.idempotency_key
- active holds counted with an expires_at filter, so no background
cleanup is required for correctness
- 27 feature tests against MySQL, service documentation, Postman collection
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 lines
283 B
Text
24 lines
283 B
Text
*.log
|
|
.DS_Store
|
|
.env
|
|
.env.backup
|
|
.env.production
|
|
.phpactor.json
|
|
.phpunit.result.cache
|
|
/.fleet
|
|
/.idea
|
|
/.nova
|
|
/.phpunit.cache
|
|
/.vscode
|
|
/.zed
|
|
/auth.json
|
|
/node_modules
|
|
/public/build
|
|
/public/hot
|
|
/public/storage
|
|
/storage/*.key
|
|
/storage/pail
|
|
/vendor
|
|
Homestead.json
|
|
Homestead.yaml
|
|
Thumbs.db
|