Corrected Korea

This commit is contained in:
2026-04-09 11:20:16 +10:00
parent 43f5c8ac3e
commit 7a07616f03
19 changed files with 1530 additions and 399 deletions
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\User;
use App\Models\UserFlight;
use App\Http\Resources\UserFlightResource;
use Illuminate\Support\Facades\DB;
use Inertia\Inertia;
@@ -15,20 +16,20 @@ class FlightProfileController extends Controller
$flights = UserFlight::where('user_id', $user->id)
->with([
'departureAirport',
'arrivalAirport',
'departureAirport.region.country',
'arrivalAirport.region.country',
'airline.country',
'aircraft',
'seatType',
'flightReason',
'flightClass',
])
->orderBy('departure_date')
->orderBy('departure_date', 'desc')
->get();
return Inertia::render('FlightProfile', [
'user' => $user,
'flights' => $flights,
'flights' => UserFlightResource::collection($flights)->resolve(),
]);
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ class LogoController extends Controller
]);
}
public function getLogoById(int $id){
public function getLogoById($id){
$airline = Airline::where('id', $id)
->first();
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace App\Http\Resources;
use App\Models\UserFlight;
use Carbon\Carbon;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin UserFlight */
class UserFlightResource extends JsonResource
{
public function toArray($request): array
{
$departureTz = $this->departureAirport->timezone;
$arrivalTz = $this->arrivalAirport->timezone;
$duration = $this->departure_date->diffInMinutes($this->arrival_date);
$hours = intdiv($duration, 60);
$minutes = $duration % 60;
$durationDisplay = $hours . 'h ' . str_pad($minutes, 2, '0', STR_PAD_LEFT) . 'm';
$departureLocal = $this->departure_date->copy()->setTimezone($departureTz);
$arrivalLocal = $this->arrival_date?->copy()->setTimezone($arrivalTz);
$distance = $this->calculateGreatCircleDistance();
$dayDifference = (int) abs(Carbon::parse($arrivalLocal->toDateString())
->diffInDays(Carbon::parse($departureLocal->toDateString())));
return [
...$this->resource->toArray(),
'departure_date_display' => $departureLocal->format('j M Y'),
'departure_time_display' => $departureLocal->format('g:iA'),
'arrival_date_display' => $arrivalLocal?->format('j M Y'),
'arrival_time_display' => $arrivalLocal?->format('g:iA'),
'arrival_day_difference' => $dayDifference,
'duration' => $duration,
'duration_display' => $durationDisplay,
'distance' => $distance,
];
}
}
+18
View File
@@ -31,6 +31,24 @@ class UserFlight extends Model
'arrival_date' => 'immutable_datetime',
];
public function calculateGreatCircleDistance(): float{
$earthRadiusKm = 6371;
[$depLat, $depLong] = [$this->departureAirport->latitude_deg, $this->departureAirport->longitude_deg];
[$arrLat, $arrLong] = [$this->arrivalAirport->latitude_deg, $this->arrivalAirport->longitude_deg];
$latDelta = deg2rad($arrLat - $depLat);
$longDelta = deg2rad($arrLong - $depLong);
$a = sin($latDelta / 2) * sin($latDelta / 2)
+ cos(deg2rad($depLat)) * cos(deg2rad($arrLat))
* sin($longDelta / 2) * sin($longDelta / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
return $earthRadiusKm * $c;
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);