59 lines
1.8 KiB
PHP
59 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use App\Models\UserFlight;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
class UserFlightController extends Controller
|
|
{
|
|
|
|
public function viewableFlights(User $user, ?Request $request = null)
|
|
{
|
|
if (Gate::denies('viewProfileData', $user)) {
|
|
return response()->json([]);
|
|
}
|
|
return $this->flights($user, $request);
|
|
}
|
|
|
|
public function flights(User $user, ?Request $request = null)
|
|
{
|
|
$key = "user_flights_{$user->id}";
|
|
|
|
$json = Cache::remember($key, now()->addDays(30), function () use ($user) {
|
|
return UserFlight::where('user_id', $user->id)
|
|
->with([
|
|
'departureAirport.region.country',
|
|
'departureAirport.region.continent',
|
|
'arrivalAirport.region.country',
|
|
'arrivalAirport.region.continent',
|
|
'airline.country',
|
|
'airline.alliance',
|
|
'aircraft',
|
|
'seatType',
|
|
'flightReason',
|
|
'flightClass',
|
|
'crewType'
|
|
])
|
|
->orderBy('departure_date', 'desc')
|
|
->get()
|
|
->values()
|
|
->toJson();
|
|
});
|
|
|
|
if ($request?->boolean('departed_only')) {
|
|
$filtered = collect(json_decode($json))
|
|
->filter(fn($f) => $f->departure_date <= now('UTC')->toDateString())
|
|
->values()
|
|
->toJson();
|
|
|
|
return response($filtered, 200)->header('Content-Type', 'application/json');
|
|
}
|
|
|
|
return response($json, 200)->header('Content-Type', 'application/json');
|
|
}
|
|
}
|