diff --git a/app/Console/Commands/UpdateDepartedFlights.php b/app/Console/Commands/UpdateDepartedFlights.php index ba7ff28..addc643 100644 --- a/app/Console/Commands/UpdateDepartedFlights.php +++ b/app/Console/Commands/UpdateDepartedFlights.php @@ -3,6 +3,7 @@ namespace App\Console\Commands; use App\Models\UserFlight; +use Carbon\Carbon; use Illuminate\Console\Attributes\Description; use Illuminate\Console\Attributes\Signature; use Illuminate\Console\Command; @@ -31,7 +32,6 @@ class UpdateDepartedFlights extends Command $this->info("Found {$userFlights->count()} flights."); foreach ($userFlights as $flight) { - // Split "QF22" into ["QF", "22"] preg_match('/^([A-Z]{2,3})(\d+)$/i', $flight->flight_number, $matches); if (empty($matches)) { @@ -65,11 +65,40 @@ class UpdateDepartedFlights extends Command continue; } + $tailNumber = $flightData['positional']['flexTrack']['tailNumber'] ?? null; $estimatedDepartureUtc = $flightData['schedule']['estimatedActualDepartureUTC'] ?? null; $estimatedArrivalUtc = $flightData['schedule']['estimatedActualArrivalUTC'] ?? null; $equipmentCode = $flightData['additionalFlightInfo']['equipment']['iata'] ?? null; + $apiDepartureIata = $data['data']['departureAirport']['iata'] ?? null; + $apiArrivalIata = $data['data']['arrivalAirport']['iata'] ?? null; + + if ($apiDepartureIata !== $flight->departureAirport->iata_code || + $apiArrivalIata !== $flight->arrivalAirport->iata_code) { + $this->warn("Airport mismatch for {$airlineCode}{$flightNumber} — API: {$apiDepartureIata}→{$apiArrivalIata}, expected: {$flight->departureAirport->iata_code}→{$flight->arrivalAirport->iata_code}"); + continue; + } + + $updates = []; + + if ($tailNumber && $tailNumber !== $flight->aircraft_registration) { + $updates['aircraft_registration'] = $tailNumber; + } + + if ($estimatedDepartureUtc && Carbon::parse($estimatedDepartureUtc)->ne($flight->departure_date)) { + $updates['departure_date'] = Carbon::parse($estimatedDepartureUtc); + } + + if ($estimatedArrivalUtc && Carbon::parse($estimatedArrivalUtc)->ne($flight->arrival_date)) { + $updates['arrival_date'] = Carbon::parse($estimatedArrivalUtc); + } + + if (!empty($updates)) { + $flight->update($updates); + $this->info("Updated flight {$airlineCode}{$flightNumber}: " . implode(', ', array_keys($updates))); + } + $this->info("Flight {$airlineCode}{$flightNumber} — Tail: {$tailNumber}, Equipment: {$equipmentCode}"); $this->info("Departure: {$estimatedDepartureUtc} | Arrival: {$estimatedArrivalUtc}"); diff --git a/resources/js/Components/FlightsGoneBy/DepartureBoard.vue b/resources/js/Components/FlightsGoneBy/DepartureBoard.vue index 977e45d..b8b2149 100644 --- a/resources/js/Components/FlightsGoneBy/DepartureBoard.vue +++ b/resources/js/Components/FlightsGoneBy/DepartureBoard.vue @@ -21,7 +21,6 @@ const props = defineProps<{ flightId?: number | null }>() -console.log(props.user) function editRoute(id: number) { return route('flights.edit', { flight: id }) @@ -87,13 +86,12 @@ today.setHours(0, 0, 0, 0) const isSorting = computed(() => sortBy.value.length > 0) const upcomingFlights = computed(() => - props.flightStats.upcomingFlights.value - .sort((a, b) => new Date(a.departure_date).getTime() - new Date(b.departure_date).getTime()) + [...props.flightStats.upcomingFlights.value] + .sort((a, b) => new Date(a.departure_date).getTime() - new Date(b.departure_date).getTime()) ) const departedFlights = computed(() => - props.flightStats.pastFlights.value - .filter(f => new Date(f.departure_date) < today) + [...props.flightStats.pastFlights.value] .sort((a, b) => new Date(b.departure_date).getTime() - new Date(a.departure_date).getTime()) )