intitial work on rest api

This commit is contained in:
Nabeel Shahzad 2017-08-14 18:26:20 -05:00
parent e19b84a078
commit bc94772ce2
10 changed files with 179 additions and 11 deletions

View File

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Response;
use App\Http\Controllers\AppBaseController;
class BaseController extends AppBaseController
{
public function status()
{
return response()->json(
['message' => 'hi'],
200
);
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Models\Airline;
use App\Models\Airport;
use App\Models\Flight;
use App\Models\Transformers\FlightTransformer;
use App\Http\Controllers\AppBaseController;
class FlightController extends AppBaseController
{
public function search(Request $request)
{
$where = [];
if($request->airline) {
$airline = Airline::where('code', $request->airline)->first()->id;
$where['airline_id'] = $airline;
}
if($request->depICAO) {
$airport = Airport::where('icao', $request->depICAO)->first()->id;
$where['dpt_airport_id'] = $airport;
}
if($request->arrICAO) {
$airport = Airport::where('icao', $request->depICAO)->first()->id;
$where['dpt_airport_id'] = $airport;
}
$flights = Flight::where($where)->get();
return fractal($flights, new FlightTransformer())->respond();
}
}

View File

@ -0,0 +1,40 @@
<?php
/**
* https://stackoverflow.com/a/34894933
*/
namespace App\Http\Middleware;
use Closure;
class MeasureExecutionTime
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
// Get the response
$response = $next($request);
// Calculate execution time
$executionTime = microtime(true) - LUMEN_START;
// I assume you're using valid json in your responses
// Then I manipulate them below
$content = json_decode($response->getContent(), true) + [
'execution_time' => $executionTime,
];
// Change the content of your response
$response->setData($content);
// Return the response
return $response;
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace App\Models\Transformers;
use League\Fractal\TransformerAbstract;
use App\Models\Flight;
class FlightTransformer extends TransformerAbstract
{
public function transform(Flight $flight)
{
$ret = [
'id' => $flight->id,
'airline' => [
'id' => $flight->airline->id,
'code' => $flight->airline->code,
'name' => $flight->airline->name,
],
'dpt' => [
'id' => $flight->dpt_airport->id,
'icao' => $flight->dpt_airport->icao,
'name' => $flight->dpt_airport->name,
],
'arr' => [
'id' => $flight->arr_airport->id,
'icao' => $flight->arr_airport->icao,
'name' => $flight->arr_airport->name,
],
'alt' => [],
];
if($flight->alt_airport_id) {
$flight['alt'] = [
'id' => $flight->alt_airport->id,
'icao' => $flight->alt_airport->icao,
'name' => $flight->alt_airport->name,
];
}
return $ret;
}
}

View File

@ -66,7 +66,10 @@ class RouteServiceProvider extends ServiceProvider
protected function mapApiRoutes()
{
Route::group([
'middleware' => 'api',
'middleware' => [
'api',
\App\Http\Middleware\MeasureExecutionTime::class
],
'namespace' => $this->namespace."\\API",
'prefix' => 'api',
'as' => 'api.',

View File

@ -11,6 +11,8 @@
|
*/
define('LUMEN_START', microtime(true));
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);

View File

@ -58,6 +58,8 @@ return [
InfyOm\AdminLTETemplates\AdminLTETemplatesServiceProvider::class,
Zizaco\Entrust\EntrustServiceProvider::class,
anlutro\LaravelSettings\ServiceProvider::class,
Spatie\Fractal\FractalServiceProvider::class,
/*
* Application Service Providers...
@ -72,7 +74,6 @@ return [
],
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
@ -87,8 +88,13 @@ return [
'Entrust' => Zizaco\Entrust\EntrustFacade::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Flash' => Laracasts\Flash\Flash::class,
'Form' => Collective\Html\FormFacade::class,
'Fractal' => Spatie\Fractal\FractalFacade::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Geotools' => Toin0u\Geotools\Facade\Geotools::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Html' => Collective\Html\HtmlFacade::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
@ -102,17 +108,13 @@ return [
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Setting' => anlutro\LaravelSettings\Facade::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Utils' => App\Facades\Utils::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
'Flash' => Laracasts\Flash\Flash::class,
'Yaml' => Symfony\Component\Yaml\Yaml::class,
'Geotools' => Toin0u\Geotools\Facade\Geotools::class,
'Setting' => anlutro\LaravelSettings\Facade::class,
'Utils' => App\Facades\Utils::class,
],
];

View File

@ -0,0 +1,18 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Serializer
|--------------------------------------------------------------------------
|
| The default serializer to be used when performing a transformation. It
| may be left empty to use Fractal's default one. This can either be a
| string or a League\Fractal\Serializer\SerializerAbstract subclass.
|
*/
'default_serializer' => '',
];

View File

@ -13,6 +13,8 @@ use Illuminate\Http\Request;
|
*/
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
Route::group([], function () {
Route::match(['get'], 'status', 'BaseController@status');
Route::match(['get'], 'flights/search', 'FlightController@search');
});