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

119 lines
2.7 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Api;
use App\Contracts\Controller;
2019-07-16 03:51:35 +08:00
use App\Http\Resources\Airport as AirportResource;
use App\Http\Resources\AirportDistance as AirportDistanceResource;
2018-02-21 12:33:09 +08:00
use App\Repositories\AirportRepository;
use App\Services\AirportService;
2018-01-06 05:30:35 +08:00
use Illuminate\Http\Request;
use Prettus\Repository\Criteria\RequestCriteria;
/**
* Class AirportController
*/
class AirportController extends Controller
{
private $airportRepo;
private $airportSvc;
2018-02-21 12:33:09 +08:00
/**
* AirportController constructor.
2018-08-27 00:40:04 +08:00
*
2018-02-21 12:33:09 +08:00
* @param AirportRepository $airportRepo
* @param AirportService $airportSvc
2018-02-21 12:33:09 +08:00
*/
public function __construct(
AirportRepository $airportRepo,
AirportService $airportSvc
) {
$this->airportRepo = $airportRepo;
$this->airportSvc = $airportSvc;
}
/**
* Return all the airports, paginated
2018-08-27 00:40:04 +08:00
*
2018-02-21 12:33:09 +08:00
* @param Request $request
2018-08-27 00:40:04 +08:00
*
2018-02-21 12:33:09 +08:00
* @return mixed
*/
2018-01-06 05:30:35 +08:00
public function index(Request $request)
{
2018-01-06 05:30:35 +08:00
$where = [];
if ($request->filled('hub')) {
$where['hub'] = $request->get('hub');
}
$this->airportRepo->pushCriteria(new RequestCriteria($request));
2018-01-06 05:30:35 +08:00
$airports = $this->airportRepo
->whereOrder($where, 'icao', 'asc')
->paginate();
2018-01-06 05:30:35 +08:00
return AirportResource::collection($airports);
}
2018-02-21 12:33:09 +08:00
/**
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
2018-01-06 05:30:35 +08:00
public function index_hubs()
{
$where = [
'hub' => true,
];
$airports = $this->airportRepo
->whereOrder($where, 'icao', 'asc')
->paginate();
2018-01-06 05:30:35 +08:00
return AirportResource::collection($airports);
}
/**
* Do a lookup, via vaCentral, for the airport information
2018-08-27 00:40:04 +08:00
*
* @param $id
2018-08-27 00:40:04 +08:00
*
* @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
2018-08-27 00:40:04 +08:00
*
* @param $id
2018-08-27 00:40:04 +08:00
*
* @return AirportResource
*/
public function lookup($id)
{
$airport = $this->airportSvc->lookupAirport($id);
return new AirportResource(collect($airport));
}
/**
* Do a lookup, via vaCentral, for the airport information
*
* @param $fromIcao
* @param $toIcao
*
* @return AirportDistanceResource
*/
public function distance($fromIcao, $toIcao)
{
$distance = $this->airportSvc->calculateDistance($fromIcao, $toIcao);
return new AirportDistanceResource([
'fromIcao' => $fromIcao,
'toIcao' => $toIcao,
'distance' => $distance,
]);
}
}