diff --git a/app/Http/Controllers/Api/AirportController.php b/app/Http/Controllers/Api/AirportController.php index a56b1316..f0cbefb5 100644 --- a/app/Http/Controllers/Api/AirportController.php +++ b/app/Http/Controllers/Api/AirportController.php @@ -2,10 +2,12 @@ namespace App\Http\Controllers\Api; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; + use App\Repositories\AirportRepository; use App\Http\Resources\Airport as AirportResource; -use Illuminate\Support\Facades\Cache; use VaCentral\Airport as AirportLookup; class AirportController extends RestController @@ -21,9 +23,30 @@ class AirportController extends RestController /** * Return all the airports, paginated */ - public function index() + public function index(Request $request) { - $airports = $this->airportRepo->orderBy('icao', 'asc')->paginate(50); + $where = []; + if ($request->filled('hub')) { + $where['hub'] = $request->get('hub'); + } + + $airports = $this->airportRepo + ->whereOrder($where, 'icao', 'asc') + ->paginate(50); + + return AirportResource::collection($airports); + } + + public function index_hubs() + { + $where = [ + 'hub' => true, + ]; + + $airports = $this->airportRepo + ->whereOrder($where, 'icao', 'asc') + ->paginate(50); + return AirportResource::collection($airports); } diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php index 4833f5af..42458211 100644 --- a/app/Repositories/BaseRepository.php +++ b/app/Repositories/BaseRepository.php @@ -49,4 +49,18 @@ abstract class BaseRepository extends \Prettus\Repository\Eloquent\BaseRepositor { return $this->orderBy($sort_by, 'desc')->paginate($count); } + + /** + * Find records with a WHERE clause but also sort them + * @param $where + * @param $sort_by + * @param $order_by + * @return $this + */ + public function whereOrder($where, $sort_by, $order_by) + { + return $this->scopeQuery(function($query) use ($where, $sort_by, $order_by) { + return $query->where($where)->orderBy($sort_by, $order_by); + }); + } } diff --git a/app/Routes/api.php b/app/Routes/api.php index 6062dc73..e665c175 100755 --- a/app/Routes/api.php +++ b/app/Routes/api.php @@ -8,6 +8,7 @@ Route::group([], function() Route::get('acars', 'AcarsController@index'); Route::get('airports', 'AirportController@index'); + Route::get('airports/hubs', 'AirportController@index_hubs'); Route::get('airports/{id}', 'AirportController@get'); Route::get('airports/{id}/lookup', 'AirportController@lookup'); diff --git a/tests/ApiTest.php b/tests/ApiTest.php index 6527c4e5..5df63c35 100644 --- a/tests/ApiTest.php +++ b/tests/ApiTest.php @@ -90,7 +90,7 @@ class ApiTest extends TestCase public function testGetAllAirports() { $user = factory(App\Models\User::class)->create(); - factory(App\Models\Airport::class, 120)->create(); + factory(App\Models\Airport::class, 70)->create(); $response = $this->user_get($user, '/api/airports/') ->assertStatus(200) @@ -106,6 +106,18 @@ class ApiTest extends TestCase ->assertJsonCount(20, 'data'); } + public function testGetAllAirportsHubs() + { + $user = factory(App\Models\User::class)->create(); + + factory(App\Models\Airport::class, 10)->create(); + factory(App\Models\Airport::class)->create(['hub' => 1]); + + $this->user_get($user, '/api/airports/hubs') + ->assertStatus(200) + ->assertJsonCount(1, 'data'); + } + /** * Test getting the subfleets */