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) {
|
$factory->define(App\Models\Aircraft::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 100000),
|
#'id' => $faker->unique()->numberBetween(10, 100000),
|
||||||
'subfleet_id' => function() {
|
'subfleet_id' => function() {
|
||||||
return factory(App\Models\Subfleet::class)->create()->id;
|
return factory(App\Models\Subfleet::class)->create()->id;
|
||||||
},
|
},
|
||||||
'airport_id' => function () {
|
'airport_id' => function () {
|
||||||
return factory(App\Models\Airport::class)->create()->id;
|
return factory(App\Models\Airport::class)->create()->id;
|
||||||
},
|
},
|
||||||
|
'icao' => $faker->unique()->text(5),
|
||||||
'name' => $faker->unique()->text(50),
|
'name' => $faker->unique()->text(50),
|
||||||
'registration' => $faker->unique()->text(10),
|
'registration' => $faker->unique()->text(10),
|
||||||
'tail_number' => $faker->unique()->text(10),
|
'tail_number' => $faker->unique()->text(10),
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Faker\Generator as Faker;
|
use Faker\Generator as Faker;
|
||||||
|
use Hashids\Hashids;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add any number of airports. Don't really care if they're real or not
|
* Add any number of airports. Don't really care if they're real or not
|
||||||
*/
|
*/
|
||||||
$factory->define(App\Models\Airline::class, function (Faker $faker) {
|
$factory->define(App\Models\Airline::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
#'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
'icao' => function(array $apt) { return substr($apt['id'],0, 4); },
|
'icao' => function (array $apt) use ($faker) {
|
||||||
'iata' => function (array $apt) { return $apt['id']; },
|
$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),
|
'name' => $faker->sentence(3),
|
||||||
'country' => $faker->country,
|
'country' => $faker->country,
|
||||||
'active' => 1
|
'active' => 1
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
|
|||||||
|
|
||||||
$factory->define(App\Models\Fare::class, function (Faker $faker) {
|
$factory->define(App\Models\Fare::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
#'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
'code' => $faker->text(5),
|
'code' => $faker->text(5),
|
||||||
'name' => $faker->text(20),
|
'name' => $faker->text(20),
|
||||||
'price' => $faker->randomFloat(2, 100, 1000),
|
'price' => $faker->randomFloat(2, 100, 1000),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ use Faker\Generator as Faker;
|
|||||||
*/
|
*/
|
||||||
$factory->define(App\Models\Rank::class, function (Faker $faker) {
|
$factory->define(App\Models\Rank::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
#'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
'name' => $faker->unique()->text(50),
|
'name' => $faker->unique()->text(50),
|
||||||
'hours' => $faker->numberBetween(10, 50),
|
'hours' => $faker->numberBetween(10, 50),
|
||||||
'auto_approve_acars' => 0,
|
'auto_approve_acars' => 0,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
|
|||||||
|
|
||||||
$factory->define(App\Models\Subfleet::class, function (Faker $faker) {
|
$factory->define(App\Models\Subfleet::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
#'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
'airline_id' => 1,
|
'airline_id' => 1,
|
||||||
'name' => $faker->unique()->text(50),
|
'name' => $faker->unique()->text(50),
|
||||||
'type' => $faker->unique()->text(7),
|
'type' => $faker->unique()->text(7),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ $factory->define(App\Models\User::class, function (Faker $faker)
|
|||||||
static $password;
|
static $password;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
#'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
'name' => $faker->name,
|
'name' => $faker->name,
|
||||||
'email' => $faker->safeEmail,
|
'email' => $faker->safeEmail,
|
||||||
'password' => $password ?: $password = Hash::make('secret'),
|
'password' => $password ?: $password = Hash::make('secret'),
|
||||||
|
|||||||
@@ -2,9 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
use App\Repositories\AircraftRepository;
|
use App\Repositories\AircraftRepository;
|
||||||
use App\Repositories\SubfleetRepository;
|
use App\Repositories\SubfleetRepository;
|
||||||
|
|
||||||
|
use App\Http\Resources\Aircraft as AircraftResource;
|
||||||
use App\Http\Resources\Subfleet as SubfleetResource;
|
use App\Http\Resources\Subfleet as SubfleetResource;
|
||||||
|
|
||||||
class FleetController extends RestController
|
class FleetController extends RestController
|
||||||
@@ -13,10 +16,10 @@ class FleetController extends RestController
|
|||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
AircraftRepository $aircraftRepo,
|
AircraftRepository $aircraftRepo,
|
||||||
SubfleetRepository $airportRepo
|
SubfleetRepository $subfleetRepo
|
||||||
) {
|
) {
|
||||||
$this->aircraftRepo = $airportRepo;
|
$this->aircraftRepo = $aircraftRepo;
|
||||||
$this->subfleetRepo = $airportRepo;
|
$this->subfleetRepo = $subfleetRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,10 +28,36 @@ class FleetController extends RestController
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$airports = $this->subfleetRepo
|
$subfleets = $this->subfleetRepo
|
||||||
->with(['aircraft', 'airline', 'fares', 'ranks'])
|
->with(['aircraft', 'airline', 'fares', 'ranks'])
|
||||||
->paginate(50);
|
->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('airports/{id}/lookup', 'AirportController@lookup');
|
||||||
|
|
||||||
Route::get('fleet', 'FleetController@index');
|
Route::get('fleet', 'FleetController@index');
|
||||||
|
Route::get('fleet/aircraft/{id}', 'FleetController@get_aircraft');
|
||||||
|
|
||||||
Route::get('flights/search', 'FlightController@search');
|
Route::get('flights/search', 'FlightController@search');
|
||||||
Route::get('flights/{id}', 'FlightController@get');
|
Route::get('flights/{id}', 'FlightController@get');
|
||||||
|
|||||||
@@ -139,4 +139,38 @@ class ApiTest extends TestCase
|
|||||||
$this->assertCount($size, $subfleet['aircraft']);
|
$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