Add /api/fleet to get subfleets and all the aircraft #120

This commit is contained in:
Nabeel Shahzad
2018-01-05 10:45:34 -06:00
parent e931310dee
commit 1ee9041058
11 changed files with 105 additions and 27 deletions

View File

@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Aircraft::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
'id' => $faker->unique()->numberBetween(10, 100000),
'subfleet_id' => function() {
return factory(App\Models\Subfleet::class)->create()->id;
},

View File

@@ -0,0 +1,21 @@
<?php
use Faker\Generator as Faker;
/*
* id: 2
name: Junior First Officer
hours: 10
auto_approve_acars: 1
auto_approve_manual: 1
*/
$factory->define(App\Models\Rank::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000),
'name' => $faker->unique()->text(50),
'hours' => $faker->numberBetween(10, 50),
'auto_approve_acars' => 0,
'auto_approve_manual' => 0,
'auto_promote' => 0,
];
});

View File

@@ -2,17 +2,14 @@
namespace App\Http\Controllers\Api;
use Log;
use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;
use App\Models\Acars;
use App\Services\GeoService;
use App\Repositories\AcarsRepository;
use App\Repositories\PirepRepository;
class AcarsController extends AppBaseController
class AcarsController extends RestController
{
protected $acarsRepo, $geoSvc, $pirepRepo;

View File

@@ -3,13 +3,12 @@
namespace App\Http\Controllers\Api;
use App\Repositories\AirportRepository;
use App\Http\Controllers\AppBaseController;
use App\Http\Resources\Airport as AirportResource;
use Illuminate\Support\Facades\Cache;
use VaCentral\Airport as AirportLookup;
class AirportController extends AppBaseController
class AirportController extends RestController
{
protected $airportRepo;

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Api;
use App\Repositories\AircraftRepository;
use App\Repositories\SubfleetRepository;
use App\Http\Resources\Subfleet as SubfleetResource;
class FleetController extends RestController
{
protected $aircraftRepo, $subfleetRepo;
public function __construct(
AircraftRepository $aircraftRepo,
SubfleetRepository $airportRepo
) {
$this->aircraftRepo = $airportRepo;
$this->subfleetRepo = $airportRepo;
}
/**
* Return all the subfleets and the aircraft and any other associated data
* Paginated
*/
public function index()
{
$airports = $this->subfleetRepo
->with(['aircraft', 'airline', 'fares', 'ranks'])
->paginate(50);
return SubfleetResource::collection($airports);
}
}

View File

@@ -2,16 +2,14 @@
namespace App\Http\Controllers\Api;
use Log;
use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;
use App\Repositories\FlightRepository;
use App\Http\Resources\Flight as FlightResource;
use Prettus\Repository\Exceptions\RepositoryException;
class FlightController extends AppBaseController
class FlightController extends RestController
{
protected $flightRepo;

View File

@@ -3,10 +3,8 @@
namespace App\Http\Controllers\Api;
use PragmaRX\Version\Package\Facade as Version;
use App\Http\Controllers\AppBaseController;
class StatusController extends AppBaseController
class StatusController extends RestController
{
public function status()
{

View File

@@ -5,18 +5,15 @@ namespace App\Http\Controllers\Api;
use Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;
use App\Repositories\UserRepository;
use App\Models\User;
use App\Models\UserBid;
use App\Http\Resources\Flight as FlightResource;
use App\Http\Resources\User as UserResource;
use App\Http\Resources\UserBid as UserBidResource;
class UserController extends AppBaseController
class UserController extends RestController
{
protected $userRepo;

View File

@@ -41,31 +41,31 @@ class Subfleet extends BaseModel
public function aircraft()
{
return $this->hasMany('App\Models\Aircraft', 'subfleet_id');
return $this->hasMany(Aircraft::class, 'subfleet_id');
}
public function airline()
{
return $this->belongsTo('App\Models\Airline', 'airline_id');
return $this->belongsTo(Airline::class, 'airline_id');
}
public function fares()
{
return $this->belongsToMany(
'App\Models\Fare',
Fare::class,
'subfleet_fare'
)->withPivot('price', 'cost', 'capacity');
}
public function flights()
{
return $this->belongsToMany('App\Models\Flight', 'subfleet_flight');
return $this->belongsToMany(Flight::class, 'subfleet_flight');
}
public function ranks()
{
return $this->belongsToMany(
'App\Models\Ranks',
Rank::class,
'subfleet_rank'
)->withPivot('acars_pay', 'manual_pay');
}

View File

@@ -11,11 +11,14 @@ Route::group([], function()
Route::get('airports/{id}', 'AirportController@get');
Route::get('airports/{id}/lookup', 'AirportController@lookup');
Route::get('fleet', 'FleetController@index');
Route::get('flights/search', 'FlightController@search');
Route::get('flights/{id}', 'FlightController@get');
Route::get('pireps/{id}/acars', 'PirepController@acars_get');
Route::get('pireps/{id}/geojson', 'PirepController@acars_get');
Route::get('pireps/{id}/route', 'PirepController@route_get');
Route::get('pireps/{id}/acars/positions', 'PirepController@acars_get');
Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson');
Route::get('status', 'StatusController@status');
});
@@ -32,16 +35,13 @@ Route::group(['middleware' => ['api.auth']], function ()
Route::delete('pireps/{id}/cancel', 'PirepController@cancel');
Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson');
Route::get('pireps/{id}/acars/position', 'PirepController@acars_get');
Route::post('pireps/{id}/acars/position', 'PirepController@acars_store');
Route::get('pireps/{id}/acars/positions', 'PirepController@acars_get');
Route::post('pireps/{id}/acars/positions', 'PirepController@acars_store');
Route::post('pireps/{id}/acars/log', 'PirepController@acars_log');
Route::post('pireps/{id}/acars/logs', 'PirepController@acars_log');
Route::get('pireps/{id}/route', 'PirepController@route_get');
Route::post('pireps/{id}/route', 'PirepController@route_post');
Route::delete('pireps/{id}/route', 'PirepController@route_delete');

View File

@@ -105,4 +105,38 @@ class ApiTest extends TestCase
->assertStatus(200)
->assertJsonCount(20, 'data');
}
/**
* Test getting the subfleets
*/
public function testGetSubfleets()
{
$user = factory(App\Models\User::class)->create();
$subfleetA = factory(App\Models\Subfleet::class)->create();
$subfleetB = factory(App\Models\Subfleet::class)->create();
$subfleetA_size = \random_int(2, 10);
$subfleetB_size = \random_int(2, 10);
factory(App\Models\Aircraft::class, $subfleetA_size)->create([
'subfleet_id' => $subfleetA->id
]);
factory(App\Models\Aircraft::class, $subfleetB_size)->create([
'subfleet_id' => $subfleetB->id
]);
$response = $this->user_get($user, '/api/fleet');
$response->assertStatus(200);
$body = $response->json();
foreach($body['data'] as $subfleet) {
if($subfleet['id'] === $subfleetA->id) {
$size = $subfleetA_size;
} else {
$size = $subfleetB_size;
}
$this->assertCount($size, $subfleet['aircraft']);
}
}
}