Add lookup for aircraft as /fleet/aircraft/{id} #120
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user