Commit Graph

286 Commits

Author SHA1 Message Date
Serreau Jovann
179a0703f8 Add Billet entity, BilletDesign, ticket designer, CRUD billets, commissions
- Create Billet entity: name, position, priceHT, quantity (nullable=unlimited),
  isGeneratedBillet, hasDefinedExit, notBuyable, type (billet/reservation_brocante/vote),
  stripeProductId, description, picture (VichUploader), category (ManyToOne CASCADE)
- Create BilletDesign entity (OneToOne Event): accentColor, invitationTitle, invitationColor
- Billet CRUD: add/edit/delete with access control, Stripe product sync on connected account
- Billet reorder: drag & drop with position field, refactored sortable.js for both categories and billets
- Ticket designer tab (custom offer only): accent color, invitation title/color, live iframe preview
- A4 ticket preview: 4 zones (HG infos+billet, HD affiche, BG association, BD sortie+invitation), fake QR code SVG
- Commission calculator JS: live breakdown of E-Ticket fee, Stripe fee (1.5%+0.25EUR), net amount
- Sales recap on categories tab: qty sold, total HT, total commissions, total net
- DisableProfilerSubscriber: disable web profiler toolbar on preview iframe
- CSP: allow self in frame-src and frame-ancestors for preview iframe
- Flysystem: dedicated billets.storage for billet images
- Upload accept restricted to png/jpeg/webp/gif (no HEIC)
- Makefile: add force_sql_dev command
- CLAUDE.md: add rule to never modify existing migrations
- Consolidate all migrations into single Version20260321111125
- Tests: BilletTest (20), BilletDesignTest (6), DisableProfilerSubscriberTest (5),
  billet-designer.test.js (7), commission-calculator.test.js (7),
  AccountControllerTest billet CRUD tests (11)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 12:19:46 +01:00
Serreau Jovann
c054e9913e Add assertion to dragend null test case
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 10:22:33 +01:00
Serreau Jovann
f2bce4f191 Sortable tests, deduplicate event hydration, disable php:S1448
- Add sortable.js tests (12 tests): drag/drop, reorder, early returns, edge cases
- Use target.before()/after() instead of list.insertBefore() in sortable.js
- Extract hydrateEventFromRequest() to eliminate duplicated code in createEvent/editEvent
- Disable SonarQube rule php:S1448 (too many methods per class)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 10:12:17 +01:00
Serreau Jovann
5ae948b94f aa 2026-03-20 23:37:16 +01:00
Serreau Jovann
9290411652 Add isHidden to Category, category CRUD tests, coverage improvements
- Add isHidden field to Category entity with migration (DEFAULT false for existing rows)
- Add isHidden checkbox to edit category template and "Masquee" badge on category list
- Save isHidden in editCategory controller method
- Fix Category.isActive() indentation
- Create CategoryTest with full coverage (14 tests): defaults, setters, setEvent logic, isActive, isHidden
- Add category CRUD tests to AccountControllerTest: add/edit/delete/reorder categories with access control
- Add cookie-consent tests for dev env early return and Cloudflare tunnel script
- Exclude PayoutPdfService from phpunit coverage and SonarQube analysis

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:35:42 +01:00
Serreau Jovann
0358025fe7 Add category edit page, edit button, and drag & drop sortable with native HTML5
- Add /mon-compte/evenement/{id}/categorie/{categoryId}/modifier route (GET/POST)
- Create edit_category.html.twig with name and date fields
- Add edit button (pencil icon) on category list items
- Add sortable.js module: native HTML5 drag & drop with fetch reorder API
- Auto-correct endAt < startAt on category edit

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:16:52 +01:00
Serreau Jovann
ca0527b0db Fix category dates: use event.endAt as default, auto-correct if endAt < startAt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:13:53 +01:00
Serreau Jovann
ba55315977 Fix category dates: ensure endAt is after startAt, use event.startAt as default end
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:11:45 +01:00
Serreau Jovann
927f3e1260 Exclude StripeWebhookController and StripeService from SonarQube analysis
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:06:49 +01:00
Serreau Jovann
62865990b8 Exclude StripeWebhookController and StripeService from tests and coverage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 23:05:59 +01:00
Serreau Jovann
42ded8fbbe Add Category entity, edit event tabs (info/categories/stats/settings), CRUD categories
- Create Category entity: name, position (sortable), event, startAt, endAt, isActive()
- Default endAt: event.startAt - 1 day
- Add 4 tabs on edit event page: Informations, Categories/Billets, Statistiques, Parametres
- Add routes: add category, delete category, reorder categories (JSON API)
- Categories sorted by position, drag handle for future Sortable.js
- Active/Inactive badge based on date range
- Add migration for category table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:51:25 +01:00
Serreau Jovann
847fc437de Disable analytics in dev env, redirect to edit page after event update
- Skip loading /stats/script.js and /assets/perf.js when data-env=dev
- Add data-env="{{ app.environment }}" to body tag
- Redirect to edit event page instead of events list after saving

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:39:38 +01:00
Serreau Jovann
57ea5c33ac Disable service worker in PWA config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:37:21 +01:00
Serreau Jovann
1f6cb5db1e Keep event online/secret status when editing, don't reset to false
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:35:42 +01:00
Serreau Jovann
615e1c2eab Encrypt vault with updated Stripe webhook secrets
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:33:24 +01:00
Serreau Jovann
3e8eed4edb Split Stripe webhooks: /stripe/webhook for payouts, /stripe/webhook/connect for v2 Connect
- Separate webhook routes with different secrets
- Add verifyConnectWebhookSignature() to StripeService
- Add STRIPE_WEBHOOK_SECRET_CONNECT env var
- Update vault with prod secrets for both endpoints

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:31:00 +01:00
Serreau Jovann
3ee1bffc2a Add HomeController coverage: wrong orgaSlug redirect, contact 404, contact success with email
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:55:07 +01:00
Serreau Jovann
e8e56e226a Refactor CspReportController to max 3 returns, extract methods, exclude editor/event-map from SonarQube
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:53:28 +01:00
Serreau Jovann
e0d12ba874 Add coverage tests: event picture upload (create/edit), searchEvents fallback/empty/results/no-hits
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:47:38 +01:00
Serreau Jovann
8d062cfd36 Add PHPStan type annotation for fallbackOrder parameter
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:45:02 +01:00
Serreau Jovann
0860c1b08c Fix /sperf tunnel: keep rewrite to /cdn-cgi/rum (original Cloudflare endpoint)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:40:42 +01:00
Serreau Jovann
13321edd8e Rename /rum to /sperf tunnel, exclude editor.js and event-map.js from coverage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:39:39 +01:00
Serreau Jovann
361548d65c Add /rum tunnel to bypass adblock for Cloudflare RUM endpoint
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:38:17 +01:00
Serreau Jovann
e154713878 Extract initCopyUrl to module, add tests for copy-url and event-map coverage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:37:12 +01:00
Serreau Jovann
0cd1e0f061 Remove unused imports: MeilisearchService from HomeController, Event from AdminController
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:35:22 +01:00
Serreau Jovann
2ed17defe0 Extract searchEvents() to EventIndexService, reduce duplication across controllers
- Add searchEvents() method: Meilisearch search with DB fallback
- Use in HomeController, AdminController, AccountController (removes ~45 duplicated lines)
- Add assets/vendor/ to ESLint ignores
- Update EventIndexServiceTest for new constructor

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:33:37 +01:00
Serreau Jovann
13b6fd95be Extract social icons to shared partial _social_icons.html.twig to reduce duplication
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:29:58 +01:00
Serreau Jovann
295f1cf633 Ignore php:S1192 duplicate literal in HomeController (Route requirements can't use constants)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:27:09 +01:00
Serreau Jovann
1f5a9105fa Fix ESLint globals, parseFloat to Number.parseFloat, label for, add AccountController coverage tests
- Add setTimeout, globalThis, navigator, fetch, caches etc to ESLint globals
- Use Number.parseFloat in event-map.js
- Add for attribute to admin events search label
- Add tests: events search, toggle/delete access denied for other user

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:25:53 +01:00
Serreau Jovann
056b104536 Add tests: CSP GET 204, events page, event detail, slug redirect, offline event, contact empty fields, offline page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:23:21 +01:00
Serreau Jovann
63a11721ee Add tests for EventIndexService catch blocks when Meilisearch is unavailable
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:19:39 +01:00
Serreau Jovann
5fc329c2dd Upgrade spomky-labs/pwa-bundle to 1.5.7
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:16:16 +01:00
Serreau Jovann
38f03086d8 fix error navbar 2026-03-20 21:14:24 +01:00
Serreau Jovann
edd22462a6 fix error navbar 2026-03-20 21:12:34 +01:00
Serreau Jovann
83a2c44d12 attemted fix error bg color footer 2026-03-20 21:12:01 +01:00
Serreau Jovann
f23bf28bf7 Add minimal serviceworker config with src only
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:06:16 +01:00
Serreau Jovann
942dc62112 Remove serviceworker from PWA config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:05:27 +01:00
Serreau Jovann
b2c8ecf609 aa 2026-03-20 21:04:27 +01:00
Serreau Jovann
61ee9214dd Remove asset_cache, image_cache, font_cache from workbox config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:04:00 +01:00
Serreau Jovann
48da63625b Remove unsupported max_entries from asset_cache config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:02:57 +01:00
Serreau Jovann
5b3d9f96ab Add workbox clear_cache: true for cache cleanup on SW update
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:02:30 +01:00
Serreau Jovann
a9e98faf39 Add service worker with workbox: asset/image/font cache, offline fallback
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 21:01:56 +01:00
Serreau Jovann
dee2d18438 Restore full PWA manifest: icons, display_override, categories, shortcuts, favicons
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:59:54 +01:00
Serreau Jovann
47cde556d6 Remove pwa:create:sw from Makefile, restore shortcuts without icons
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:59:19 +01:00
Serreau Jovann
156042a640 Simplify pwa() call to defaults
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:57:25 +01:00
Serreau Jovann
b10ac92b99 Simplify PWA config: manifest + favicons only, remove icons and image_processor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:56:21 +01:00
Serreau Jovann
4ae23e1419 Downgrade spomky-labs/pwa-bundle to 1.4.*
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:55:49 +01:00
Serreau Jovann
e10b3bfa5c Remove service worker and workbox from PWA config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:50:43 +01:00
Serreau Jovann
16ddacff71 aa 2026-03-20 20:48:01 +01:00
Serreau Jovann
7cec1641e3 aa 2026-03-20 20:47:11 +01:00