Files
e-ticket/package.json
Serreau Jovann 61200adc74 Add stock management, order notifications, webhooks, expiration cron, and billet type validation
- Decrement billet quantity after purchase in BilletOrderService::generateOrderTickets
- Block purchase when stock is exhausted (quantity <= 0) in OrderController::buildOrderItems
- Add organizer email notification on new order (order_notification_orga template)
- Add organizer email notification on cancel/refund (order_cancelled_orga template)
- Add ExpirePendingOrdersCommand (app:orders:expire-pending) cron every 5min via Ansible
  - Cancels pending orders older than 30 minutes, restores stock, invalidates tickets
  - Includes BilletBuyerRepository::findExpiredPending query method
  - 3 unit tests covering: no expired orders, stock restoration, unlimited billets
- Add payment_intent.payment_failed webhook: cancels order, logs audit, emails buyer
- Add charge.refunded webhook: sets order to refunded, invalidates tickets, notifies orga and buyer
- Validate billet type (billet/reservation_brocante/vote) against organizer offer
  - getAllowedBilletTypes: gratuit=billet only, basic/sur-mesure=all types
  - Server-side validation in hydrateBilletFromRequest, UI filtering in templates
- Update TASK_CHECKUP.md: all Billetterie & Commandes items now complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 00:12:30 +01:00

44 lines
1.3 KiB
JSON

{
"name": "e-cosplay",
"private": true,
"version": "0.0.0",
"type": "module",
"main": "index.js",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"test": "vitest run",
"test:coverage": "vitest run --coverage"
},
"devDependencies": {
"@happy-dom/global-registrator": "^20.8.4",
"@hotwired/stimulus": "^3.0.0",
"@spomky-labs/pwa-bundle": "file:vendor/spomky-labs/pwa-bundle/assets",
"@tailwindcss/postcss": "^4.1.18",
"@vitest/coverage-v8": "^4.1.0",
"eslint": "9",
"idb": "^8.0.3",
"idb-keyval": "^6.2.2",
"postcss": "^8.5.6",
"postcss-scss": "^4.0.9",
"rollup-plugin-javascript-obfuscator": "^1.0.4",
"sass": "^1.97.3",
"stylelint": "16",
"stylelint-config-standard-scss": "13",
"vite": "^7.3.1",
"vitest": "^4.1.0"
},
"dependencies": {
"@grafikart/drop-files-element": "^1.0.9",
"@hotwired/turbo": "^8.0.23",
"@sentry/browser": "^10.38.0",
"@tailwindcss/vite": "^4.1.18",
"autoprefixer": "^10.4.24",
"insights-js": "^1.2.11",
"tailwindcss": "^4.1.18",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-favicon": "^1.0.8"
}
}