refactor(airport): delete AirportRepository

- Frontend/AirportController: drop airportRepo, use
  Airport::with('files')->find($id) ($id was already uppercased
  earlier in the method)
- Frontend/PirepController: drop airportRepo from constructor
  (only reference was a commented-out selectBoxList call). Phase
  2 precedent (Aircraft was the same case).
- Filament/Actions/ExportAction: AIRPORT case uses Airport::all()
- Delete app/Repositories/AirportRepository.php (dead selectBoxList
  goes with it)
- phpstan.neon: suppress larastan.relationExistence for
  FilesTrait::files() across Aircraft/Airline/Airport/Subfleet.
  The morphMany is trait-defined and works at runtime, but
  larastan can't statically resolve trait-declared polymorphic
  relations. First direct Eloquent with('files') call lands in
  this commit, hence the new suppression.

Final commit of Phase 3. AirportRepository is gone; 9 repositories
remain (was 10 at branch start). First Query class
(AirportSearchQuery) and search Form Request (SearchAirportsRequest)
are now in production, ready to be reused by Phases 4/6/7.
This commit is contained in:
Nabeel Shahzad 2026-04-25 12:45:15 -05:00
parent 096e647932
commit 235cdb13f3
5 changed files with 11 additions and 65 deletions

View File

@ -3,10 +3,10 @@
namespace App\Filament\Actions; namespace App\Filament\Actions;
use App\Models\Aircraft; use App\Models\Aircraft;
use App\Models\Airport;
use App\Models\Enums\ImportExportType; use App\Models\Enums\ImportExportType;
use App\Models\Fare; use App\Models\Fare;
use App\Models\Subfleet; use App\Models\Subfleet;
use App\Repositories\AirportRepository;
use App\Repositories\ExpenseRepository; use App\Repositories\ExpenseRepository;
use App\Repositories\FlightRepository; use App\Repositories\FlightRepository;
use App\Services\ExportService; use App\Services\ExportService;
@ -48,7 +48,7 @@ class ExportAction extends Action
$path = $exportSvc->exportAircraft($data); $path = $exportSvc->exportAircraft($data);
break; break;
case ImportExportType::AIRPORT: case ImportExportType::AIRPORT:
$data = app(AirportRepository::class)->all(); $data = Airport::all();
$path = $exportSvc->exportAirports($data); $path = $exportSvc->exportAirports($data);
break; break;
case ImportExportType::EXPENSES: case ImportExportType::EXPENSES:

View File

@ -3,7 +3,7 @@
namespace App\Http\Controllers\Frontend; namespace App\Http\Controllers\Frontend;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Repositories\AirportRepository; use App\Models\Airport;
use App\Repositories\FlightRepository; use App\Repositories\FlightRepository;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -13,7 +13,6 @@ use Laracasts\Flash\Flash;
class AirportController extends Controller class AirportController extends Controller
{ {
public function __construct( public function __construct(
private readonly AirportRepository $airportRepo,
private readonly FlightRepository $flightRepo private readonly FlightRepository $flightRepo
) {} ) {}
@ -36,7 +35,7 @@ class AirportController extends Controller
}, },
]; ];
$airport = $this->airportRepo->with('files')->where('id', $id)->first(); $airport = Airport::with('files')->find($id);
if (!$airport) { if (!$airport) {
Flash::error('Airport not found!'); Flash::error('Airport not found!');

View File

@ -17,7 +17,6 @@ use App\Models\PirepField;
use App\Models\SimBrief; use App\Models\SimBrief;
use App\Models\User; use App\Models\User;
use App\Repositories\AirlineRepository; use App\Repositories\AirlineRepository;
use App\Repositories\AirportRepository;
use App\Repositories\Criteria\WhereCriteria; use App\Repositories\Criteria\WhereCriteria;
use App\Repositories\FlightRepository; use App\Repositories\FlightRepository;
use App\Repositories\PirepRepository; use App\Repositories\PirepRepository;
@ -44,7 +43,6 @@ class PirepController extends Controller
{ {
public function __construct( public function __construct(
private readonly AirlineRepository $airlineRepo, private readonly AirlineRepository $airlineRepo,
private readonly AirportRepository $airportRepo,
private readonly FareService $fareSvc, private readonly FareService $fareSvc,
private readonly FlightRepository $flightRepo, private readonly FlightRepository $flightRepo,
private readonly GeoService $geoSvc, private readonly GeoService $geoSvc,
@ -289,7 +287,7 @@ class PirepController extends Controller
'read_only' => false, 'read_only' => false,
'airline_list' => $this->airlineRepo->selectBoxList(true), 'airline_list' => $this->airlineRepo->selectBoxList(true),
'aircraft_list' => $aircraft_list, 'aircraft_list' => $aircraft_list,
'airport_list' => [], // $this->airportRepo->selectBoxList(true), 'airport_list' => [],
'pirep_fields' => PirepField::whereIn('pirep_source', [$pirep_source, PirepFieldSource::BOTH])->get(), 'pirep_fields' => PirepField::whereIn('pirep_source', [$pirep_source, PirepFieldSource::BOTH])->get(),
'field_values' => [], 'field_values' => [],
'fare_values' => $fare_values, 'fare_values' => $fare_values,

View File

@ -1,57 +0,0 @@
<?php
namespace App\Repositories;
use App\Contracts\Repository;
use App\Models\Airport;
use Prettus\Repository\Contracts\CacheableInterface;
use Prettus\Repository\Traits\CacheableRepository;
class AirportRepository extends Repository implements CacheableInterface
{
use CacheableRepository;
protected $fieldSearchable = [
'iata' => 'like',
'icao' => 'like',
'name' => 'like',
];
public function model()
{
return Airport::class;
}
/**
* Return the list of airports formatted for a select box
*
* @param bool $add_blank
* @param bool $only_hubs
*/
public function selectBoxList($add_blank = false, $only_hubs = false): array
{
$retval = [];
$where = [];
if ($only_hubs) {
$where['hub'] = 1;
}
$items = $this->orderBy('icao', 'asc')->findWhere($where);
if ($add_blank) {
$retval[''] = '';
}
foreach ($items as $i) {
$s = $i->icao.' - '.$i->name;
if (!$only_hubs && $i->hub) {
$s .= ' (hub)';
}
$retval[$i->icao] = $s;
}
return $retval;
}
}

View File

@ -17,6 +17,12 @@ parameters:
# Eloquent Builder methods are not documented on repositories # Eloquent Builder methods are not documented on repositories
- '#Call to an undefined method App\\Repositories\\[a-zA-Z]+Repository::[a-zA-Z]+\(\)#' - '#Call to an undefined method App\\Repositories\\[a-zA-Z]+Repository::[a-zA-Z]+\(\)#'
# FilesTrait::files() defines a morphMany via traits — larastan's relationExistence
# rule can't statically resolve trait-defined polymorphic relations even though they
# work at runtime. Models using FilesTrait: Aircraft, Airline, Airport, Subfleet.
- identifier: larastan.relationExistence
message: '#Relation ''files'' is not found in App\\Models\\(Aircraft|Airline|Airport|Subfleet) model\.#'
# - '#PHPDoc tag @var#' # - '#PHPDoc tag @var#'
# #
# excludePaths: # excludePaths: