- index() and search() use AirportSearchQuery + SearchAirportsRequest
- index_hubs() uses Airport::byHub()->orderByIcao()
- get(Airport $airport) uses route model binding (case-insensitive
via Airport::resolveRouteBinding)
- routes/api.php: rename airports/{id} -> airports/{airport} so
Laravel binds to the typed parameter (URL format unchanged)
- Drop AirportRepository injection and Prettus criteria use
- Match Phase 2's perPage() pattern for ?limit= handling
- Add regression test asserting lowercase ICAO routes resolve
Public API contract preserved: ?search=field:value syntax, ?hub=,
?hubs=, ?limit=, ?orderBy=, ?sortedBy= all continue to work.
Drops un-tested Prettus magic params (?with, ?withCount, ?filter,
?searchFields, ?searchJoin) — narrows the public contract to what's
actually exercised.