Add lookup for aircraft as /fleet/aircraft/{id} #120

This commit is contained in:
Nabeel Shahzad
2018-01-05 13:00:45 -06:00
parent 1ee9041058
commit 500cbb8e06
9 changed files with 85 additions and 15 deletions

View File

@@ -4,13 +4,14 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Aircraft::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 100000),
#'id' => $faker->unique()->numberBetween(10, 100000),
'subfleet_id' => function() {
return factory(App\Models\Subfleet::class)->create()->id;
},
'airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id;
},
'icao' => $faker->unique()->text(5),
'name' => $faker->unique()->text(50),
'registration' => $faker->unique()->text(10),
'tail_number' => $faker->unique()->text(10),

View File

@@ -1,15 +1,20 @@
<?php
use Faker\Generator as Faker;
use Hashids\Hashids;
/**
* Add any number of airports. Don't really care if they're real or not
*/
$factory->define(App\Models\Airline::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
'icao' => function(array $apt) { return substr($apt['id'],0, 4); },
'iata' => function (array $apt) { return $apt['id']; },
#'id' => $faker->unique()->numberBetween(10, 10000),
'icao' => function (array $apt) use ($faker) {
$hashids = new Hashids(microtime(), 5);
$mt = str_replace('.', '', microtime(true));
return $hashids->encode($mt);
},
'iata' => function (array $apt) { return $apt['icao']; },
'name' => $faker->sentence(3),
'country' => $faker->country,
'active' => 1

View File

@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Fare::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
#'id' => $faker->unique()->numberBetween(10, 10000),
'code' => $faker->text(5),
'name' => $faker->text(20),
'price' => $faker->randomFloat(2, 100, 1000),

View File

@@ -11,7 +11,7 @@ use Faker\Generator as Faker;
*/
$factory->define(App\Models\Rank::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
#'id' => $faker->unique()->numberBetween(10, 10000),
'name' => $faker->unique()->text(50),
'hours' => $faker->numberBetween(10, 50),
'auto_approve_acars' => 0,

View File

@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Subfleet::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
#'id' => $faker->unique()->numberBetween(10, 10000),
'airline_id' => 1,
'name' => $faker->unique()->text(50),
'type' => $faker->unique()->text(7),

View File

@@ -7,7 +7,7 @@ $factory->define(App\Models\User::class, function (Faker $faker)
static $password;
return [
'id' => $faker->unique()->numberBetween(10, 10000),
#'id' => $faker->unique()->numberBetween(10, 10000),
'name' => $faker->name,
'email' => $faker->safeEmail,
'password' => $password ?: $password = Hash::make('secret'),

View File

@@ -2,9 +2,12 @@
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Repositories\AircraftRepository;
use App\Repositories\SubfleetRepository;
use App\Http\Resources\Aircraft as AircraftResource;
use App\Http\Resources\Subfleet as SubfleetResource;
class FleetController extends RestController
@@ -13,10 +16,10 @@ class FleetController extends RestController
public function __construct(
AircraftRepository $aircraftRepo,
SubfleetRepository $airportRepo
SubfleetRepository $subfleetRepo
) {
$this->aircraftRepo = $airportRepo;
$this->subfleetRepo = $airportRepo;
$this->aircraftRepo = $aircraftRepo;
$this->subfleetRepo = $subfleetRepo;
}
/**
@@ -25,10 +28,36 @@ class FleetController extends RestController
*/
public function index()
{
$airports = $this->subfleetRepo
->with(['aircraft', 'airline', 'fares', 'ranks'])
->paginate(50);
$subfleets = $this->subfleetRepo
->with(['aircraft', 'airline', 'fares', 'ranks'])
->paginate(50);
return SubfleetResource::collection($airports);
return SubfleetResource::collection($subfleets);
}
/**
* Get a specific aircraft. Query string required to specify the tail
* /api/aircraft/XYZ?type=registration
* @param $id
* @param Request $request
* @return AircraftResource
*/
public function get_aircraft($id, Request $request)
{
$where = [];
if($request->filled('type')) {
$where[$request->get('type')] = $id;
} else {
$where['id'] = $id;
}
$all_aircraft = $this->aircraftRepo->all();
$aircraft = $this->aircraftRepo
->with(['subfleet'])
->findWhere($where)
->first();
AircraftResource::withoutWrapping();
return new AircraftResource($aircraft);
}
}

View File

@@ -12,6 +12,7 @@ Route::group([], function()
Route::get('airports/{id}/lookup', 'AirportController@lookup');
Route::get('fleet', 'FleetController@index');
Route::get('fleet/aircraft/{id}', 'FleetController@get_aircraft');
Route::get('flights/search', 'FlightController@search');
Route::get('flights/{id}', 'FlightController@get');

View File

@@ -139,4 +139,38 @@ class ApiTest extends TestCase
$this->assertCount($size, $subfleet['aircraft']);
}
}
/**
* Test getting an aircraft
*/
public function testGetAircraft()
{
$user = factory(App\Models\User::class)->create();
$subfleet = factory(App\Models\Subfleet::class)->create();
$aircraft = factory(App\Models\Aircraft::class)->create([
'subfleet_id' => $subfleet->id
]);
/**
* Just try retrieving by ID
*/
$resp = $this->user_get($user, '/api/fleet/aircraft/'. $aircraft->id);
$body = $resp->json();
$this->assertEquals($body['id'], $aircraft->id);
$resp = $this->user_get($user,
'/api/fleet/aircraft/'.$aircraft->id.'?registration='.$aircraft->registration);
$body = $resp->json();
$this->assertEquals($body['id'], $aircraft->id);
$resp = $this->user_get($user,
'/api/fleet/aircraft/' . $aircraft->id . '?tail_number=' . $aircraft->registration);
$body = $resp->json();
$this->assertEquals($body['id'], $aircraft->id);
$resp = $this->user_get($user,
'/api/fleet/aircraft/' . $aircraft->id . '?icao=' . $aircraft->icao);
$body = $resp->json();
$this->assertEquals($body['id'], $aircraft->id);
}
}