Add /flight/:id/route resource, returns all route info that's in the navaid database closes #183
This commit is contained in:
@@ -25,7 +25,7 @@ $factory->define(App\Models\Flight::class, function (Faker $faker) use ($airline
|
|||||||
return factory(App\Models\Airport::class)->create()->id;
|
return factory(App\Models\Airport::class)->create()->id;
|
||||||
},
|
},
|
||||||
'distance' => $faker->numberBetween(0, 3000),
|
'distance' => $faker->numberBetween(0, 3000),
|
||||||
'route' => $faker->randomElement(['', $faker->text(5)]),
|
'route' => null,
|
||||||
'dpt_time' => $faker->time(),
|
'dpt_time' => $faker->time(),
|
||||||
'arr_time' => $faker->time(),
|
'arr_time' => $faker->time(),
|
||||||
'flight_time' => $faker->numberBetween(60, 360),
|
'flight_time' => $faker->numberBetween(60, 360),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use \App\Models\Enums\NavaidType;
|
|||||||
$factory->define(App\Models\Navdata::class, function (Faker $faker) {
|
$factory->define(App\Models\Navdata::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => str_replace(' ', '', str_replace('.', '', $faker->unique()->text(5))),
|
'id' => str_replace(' ', '', str_replace('.', '', $faker->unique()->text(5))),
|
||||||
'name' => $faker->unique()->text(10),
|
'name' => str_replace('.', '', $faker->unique()->word),
|
||||||
'type' => $faker->randomElement([NavaidType::VOR, NavaidType::NDB]),
|
'type' => $faker->randomElement([NavaidType::VOR, NavaidType::NDB]),
|
||||||
'lat' => $faker->latitude,
|
'lat' => $faker->latitude,
|
||||||
'lon' => $faker->longitude,
|
'lon' => $faker->longitude,
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ use Faker\Generator as Faker;
|
|||||||
*/
|
*/
|
||||||
$factory->define(App\Models\Pirep::class, function (Faker $faker) {
|
$factory->define(App\Models\Pirep::class, function (Faker $faker) {
|
||||||
|
|
||||||
static $raw_data;
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => null,
|
'id' => null,
|
||||||
'airline_id' => function () {
|
'airline_id' => function () {
|
||||||
@@ -48,7 +46,6 @@ $factory->define(App\Models\Pirep::class, function (Faker $faker) {
|
|||||||
'source_name' => 'Test Factory',
|
'source_name' => 'Test Factory',
|
||||||
'state' => PirepState::PENDING,
|
'state' => PirepState::PENDING,
|
||||||
'status' => PirepStatus::SCHEDULED,
|
'status' => PirepStatus::SCHEDULED,
|
||||||
'raw_data' => $raw_data ?: $raw_data = json_encode(['key' => 'value']),
|
|
||||||
'created_at' => Carbon::now()->toDateTimeString(),
|
'created_at' => Carbon::now()->toDateTimeString(),
|
||||||
'updated_at' => function(array $pirep) {
|
'updated_at' => function(array $pirep) {
|
||||||
return $pirep['created_at'];
|
return $pirep['created_at'];
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Http\Resources\FlightCollection;
|
|
||||||
use App\Repositories\Criteria\WhereCriteria;
|
use App\Repositories\Criteria\WhereCriteria;
|
||||||
use App\Services\FlightService;
|
use App\Services\FlightService;
|
||||||
use Auth;
|
use Auth;
|
||||||
@@ -12,7 +11,9 @@ use Prettus\Repository\Exceptions\RepositoryException;
|
|||||||
|
|
||||||
use App\Services\UserService;
|
use App\Services\UserService;
|
||||||
use App\Repositories\FlightRepository;
|
use App\Repositories\FlightRepository;
|
||||||
|
|
||||||
use App\Http\Resources\Flight as FlightResource;
|
use App\Http\Resources\Flight as FlightResource;
|
||||||
|
use App\Http\Resources\Navdata as NavdataResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FlightController
|
* Class FlightController
|
||||||
@@ -97,4 +98,18 @@ class FlightController extends RestController
|
|||||||
|
|
||||||
return FlightResource::collection($flights);
|
return FlightResource::collection($flights);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a flight's route
|
||||||
|
* @param $id
|
||||||
|
* @param Request $request
|
||||||
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||||
|
*/
|
||||||
|
public function route($id, Request $request)
|
||||||
|
{
|
||||||
|
$flight = $this->flightRepo->find($id);
|
||||||
|
$route = $this->flightSvc->getRoute($flight);
|
||||||
|
|
||||||
|
return NavdataResource::collection($route);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\Enums\NavaidType;
|
||||||
|
use Illuminate\Http\Resources\Json\Resource;
|
||||||
|
|
||||||
|
class Navdata extends Resource
|
||||||
|
{
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$point = parent::toArray($request);
|
||||||
|
|
||||||
|
// Some details about the navaid type
|
||||||
|
$type = [
|
||||||
|
'type' => $point['type'],
|
||||||
|
'name' => NavaidType::label($point['type']),
|
||||||
|
];
|
||||||
|
|
||||||
|
$point['type'] = $type;
|
||||||
|
|
||||||
|
return $point;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,9 +11,6 @@ use \GeoJson\Feature\FeatureCollection;
|
|||||||
* Return different points/features in GeoJSON format
|
* Return different points/features in GeoJSON format
|
||||||
* https://tools.ietf.org/html/rfc7946
|
* https://tools.ietf.org/html/rfc7946
|
||||||
*
|
*
|
||||||
* Once a PIREP is accepted, save this returned structure as a
|
|
||||||
* JSON-encoded string into the raw_data field of the PIREP row
|
|
||||||
*
|
|
||||||
* @package App\Models
|
* @package App\Models
|
||||||
*/
|
*/
|
||||||
class GeoJson
|
class GeoJson
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ Route::group(['middleware' => ['api.auth']], function ()
|
|||||||
Route::get('flights', 'FlightController@index');
|
Route::get('flights', 'FlightController@index');
|
||||||
Route::get('flights/search', 'FlightController@search');
|
Route::get('flights/search', 'FlightController@search');
|
||||||
Route::get('flights/{id}', 'FlightController@get');
|
Route::get('flights/{id}', 'FlightController@get');
|
||||||
|
Route::get('flights/{id}/route', 'FlightController@route');
|
||||||
|
|
||||||
Route::get('pireps/{pirep_id}', 'PirepController@get');
|
Route::get('pireps/{pirep_id}', 'PirepController@get');
|
||||||
Route::put('pireps/{pirep_id}', 'PirepController@update');
|
Route::put('pireps/{pirep_id}', 'PirepController@update');
|
||||||
|
|||||||
@@ -1,29 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA.
|
|
||||||
* User: nshahzad
|
|
||||||
* Date: 12/12/17
|
|
||||||
* Time: 2:48 PM
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use App\Repositories\FlightRepository;
|
use App\Models\Navdata;
|
||||||
use function foo\func;
|
|
||||||
use Illuminate\Support\Collection;
|
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
use App\Models\Flight;
|
use App\Models\Flight;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\UserBid;
|
use App\Models\UserBid;
|
||||||
|
use App\Repositories\FlightRepository;
|
||||||
|
use App\Repositories\NavdataRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FlightService
|
||||||
|
* @package App\Services
|
||||||
|
*/
|
||||||
class FlightService extends BaseService
|
class FlightService extends BaseService
|
||||||
{
|
{
|
||||||
protected $flightRepo, $userSvc;
|
protected $flightRepo, $navDataRepo, $userSvc;
|
||||||
|
|
||||||
public function __construct(FlightRepository $flightRepo, UserService $userSvc)
|
public function __construct(
|
||||||
{
|
FlightRepository $flightRepo,
|
||||||
|
NavdataRepository $navdataRepo,
|
||||||
|
UserService $userSvc
|
||||||
|
) {
|
||||||
$this->flightRepo = $flightRepo;
|
$this->flightRepo = $flightRepo;
|
||||||
|
$this->navDataRepo = $navdataRepo;
|
||||||
$this->userSvc = $userSvc;
|
$this->userSvc = $userSvc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,6 +100,32 @@ class FlightService extends BaseService
|
|||||||
$flight->delete();
|
$flight->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all of the navaid points as a collection
|
||||||
|
* @param Flight $flight
|
||||||
|
* @return \Illuminate\Support\Collection
|
||||||
|
*/
|
||||||
|
public function getRoute(Flight $flight)
|
||||||
|
{
|
||||||
|
if(!$flight->route) {
|
||||||
|
return collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
$route_points = array_map(function($point) {
|
||||||
|
return strtoupper($point);
|
||||||
|
}, explode(' ', $flight->route));
|
||||||
|
|
||||||
|
$route = $this->navDataRepo->findWhereIn('id', $route_points);
|
||||||
|
|
||||||
|
// Put it back into the original order the route is in
|
||||||
|
$return_points = [];
|
||||||
|
foreach($route_points as $rp) {
|
||||||
|
$return_points[] = $route->where('id', $rp)->first();
|
||||||
|
}
|
||||||
|
|
||||||
|
return collect($return_points);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow a user to bid on a flight. Check settings and all that good stuff
|
* Allow a user to bid on a flight. Check settings and all that good stuff
|
||||||
* @param Flight $flight
|
* @param Flight $flight
|
||||||
|
|||||||
+2
-1
@@ -377,7 +377,8 @@ class AcarsTest extends TestCase
|
|||||||
foreach($route as $position) {
|
foreach($route as $position) {
|
||||||
$post_route[] = [
|
$post_route[] = [
|
||||||
'order' => $order,
|
'order' => $order,
|
||||||
'name' => $position->name,
|
'id' => $position->id,
|
||||||
|
'name' => $position->id,
|
||||||
'lat' => $position->lat,
|
'lat' => $position->lat,
|
||||||
'lon' => $position->lon,
|
'lon' => $position->lon,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -68,6 +68,37 @@ class FlightTest extends TestCase
|
|||||||
$req->assertStatus(200);
|
$req->assertStatus(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the flight's route
|
||||||
|
*/
|
||||||
|
public function testFlightRoute()
|
||||||
|
{
|
||||||
|
$this->user = factory(App\Models\User::class)->create();
|
||||||
|
$flight = $this->addFlight($this->user);
|
||||||
|
|
||||||
|
$route_count = random_int(4, 6);
|
||||||
|
$route = factory(App\Models\Navdata::class, $route_count)->create();
|
||||||
|
$route_text = implode(' ', $route->pluck('id')->toArray());
|
||||||
|
|
||||||
|
$flight->route = $route_text;
|
||||||
|
$flight->save();
|
||||||
|
|
||||||
|
$res = $this->get('/api/flights/'.$flight->id.'/route');
|
||||||
|
$res->assertStatus(200);
|
||||||
|
$body = $res->json();
|
||||||
|
|
||||||
|
$this->assertCount($route_count, $body['data']);
|
||||||
|
|
||||||
|
$first_point = $body['data'][0];
|
||||||
|
$this->assertEquals($first_point['id'], $route[0]->id);
|
||||||
|
$this->assertEquals($first_point['name'], $route[0]->name);
|
||||||
|
$this->assertEquals($first_point['type']['type'], $route[0]->type);
|
||||||
|
$this->assertEquals(
|
||||||
|
$first_point['type']['name'],
|
||||||
|
\App\Models\Enums\NavaidType::label($route[0]->type)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find all of the flights
|
* Find all of the flights
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user