phpvms/app/Http/Controllers/Api/AirportController.php

101 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Resources\Airport as AirportResource;
use App\Interfaces\Controller;
use App\Repositories\AirportRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Log;
use VaCentral\Airport as AirportLookup;
/**
* Class AirportController
* @package App\Http\Controllers\Api
*/
class AirportController extends Controller
{
private $airportRepo;
/**
* AirportController constructor.
* @param AirportRepository $airportRepo
*/
public function __construct(
AirportRepository $airportRepo
) {
$this->airportRepo = $airportRepo;
}
/**
* Return all the airports, paginated
* @param Request $request
* @return mixed
*/
public function index(Request $request)
{
$where = [];
if ($request->filled('hub')) {
$where['hub'] = $request->get('hub');
}
$airports = $this->airportRepo
->whereOrder($where, 'icao', 'asc')
->paginate();
return AirportResource::collection($airports);
}
/**
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function index_hubs()
{
$where = [
'hub' => true,
];
$airports = $this->airportRepo
->whereOrder($where, 'icao', 'asc')
->paginate();
return AirportResource::collection($airports);
}
/**
* Do a lookup, via vaCentral, for the airport information
* @param $id
* @return AirportResource
*/
public function get($id)
{
$id = strtoupper($id);
return new AirportResource($this->airportRepo->find($id));
}
/**
* Do a lookup, via vaCentral, for the airport information
* @param $id
* @return AirportResource
*/
public function lookup($id)
{
$airport = Cache::remember(
config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.key').$id,
config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.time'),
function () use ($id) {
try {
return AirportLookup::get($id);
} catch (\VaCentral\HttpException $e) {
Log::error($e);
return [];
}
}
);
return new AirportResource(collect($airport));
}
}