phpvms/app/Support
Nabeel Shahzad 3c7f0e3934
feat(routeforge): refine duplicate detection
Bundles three completed OpenSpec changes:

routeforge-duplicate-detection-refinement:
- StrictDuplicateKey value object owns the 5-tuple (bundle_id,
  airline_id, flight_number, route_code, route_leg). L4 / L5 / L12 /
  DuplicateChecker delegate; no more dup'd dupKey() / normalize().
- L5 severity flipped WARNING -> ERROR for same-bundle full-tuple
  matches. Scoped to enabled = true AND owner_type IS NULL AND same
  bundle_id.
- L12 new WARNING for cross-bundle airline+flight collisions.
  Catalog grows 12 -> 13 rules.
- DuplicateChecker (the typing-time /check-duplicates endpoint)
  classifies results as same_bundle / error vs cross_bundle / warning,
  passes existing_bundle_id + existing_bundle_name to the UI.
- New migration adds flights._dup_key generated column + UNIQUE
  index. STORED on MySQL / MariaDB / PostgreSQL; VIRTUAL on SQLite
  (ALTER TABLE quirk). Driver-switched expression.
- Migration first canonicalizes route_code / route_leg storage
  ('' / '0' / 0 -> NULL), then auto-disables pre-existing dup rows
  via a single window-function pass (lowest id per cluster kept),
  with activity-log entries per disabled row.
- Flight model gains routeCode() / routeLeg() Attribute mutators
  for canonical NULL on set. Legacy 'route_leg' => 'integer' cast
  removed.
- README MySQL min bumped 5.7 -> 8.0 (window functions needed
  by the dedup migration).
- Frontend types updated: DuplicateMatch now carries severity,
  kind, existing_bundle_id, existing_bundle_name.

routeforge-page-boot-via-api:
- /boot endpoint + RouteForgeBootResource serving SPA bootstrap
  envelope (CSRF, user, airlines, routes, config, translations).
- Frontend boot.ts state init, BootError component.

routeforge-controller-thin:
- Extract AirlineStatsService, CommitInputFactory,
  LintContextFactory from the controller.
- New BundlesRequest + RouteForgeBundleResource.

Misc cleanup:
- Support\Geo utility extracted from generator.ts logic.
- BaseRouteForgeBatchRequest validation polish.

Verified: 670 pest tests pass (2682 assertions). PHPStan clean on
touched paths. Pint clean (--dirty). OpenSpec validate --strict
green.
2026-05-26 10:19:33 -05:00
..
Casts [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Dto refactor: remove VaCentral package and update airport lookup implementation 2026-05-22 18:27:54 +02:00
Resources [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Units [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
ClassLoader.php feat(admin): upgrade to Filament v4 (#2062) 2025-08-13 10:20:23 -05:00
Countries.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Dates.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Days.php [8.x] refactor: use native php enum instead of class (#2210) 2026-05-12 16:29:41 -05:00
FlightTimeBackfiller.php refactor(schema-modernization): apply PR #2215 review feedback 2026-05-23 12:05:09 -05:00
FlightTimeParser.php feat(schema-modernization): foundations for RouteForge 2026-05-23 12:05:09 -05:00
Geo.php feat(routeforge): refine duplicate detection 2026-05-26 10:19:33 -05:00
GeoJson.php Updating styling and looks of the installer/admin/system filament pages (#2211) 2026-05-20 11:05:32 -05:00
HttpClient.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
ICAO.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Math.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Metar.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Money.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
SubfleetAccessPolicy.php refactor(FlightService, PirepService, UserService): replace UserService usage with direct user methods for subfleet and aircraft access 2026-05-23 10:58:36 +02:00
ThemeViewFinder.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Timezonelist.php [8.x] feature: upgrade to Laravel 13 (#2204) 2026-05-06 11:27:21 -05:00
Utils.php feat(routeforge): admin batch flight composer + lint pipeline 2026-05-24 11:55:33 -05:00