Make sure user and acars data is sent from API

This commit is contained in:
Nabeel Shahzad
2020-03-29 13:33:14 -04:00
parent 82b873c071
commit e9b30fbe30
8 changed files with 46 additions and 24 deletions

View File

@@ -162,13 +162,17 @@ class PirepController extends Controller
}
/**
* @param $pirep_id
* @param string $id The PIREP ID
*
* @return PirepResource
*/
public function get($pirep_id)
public function get($id)
{
return new PirepResource($this->pirepRepo->find($pirep_id));
$pirep = $this->pirepRepo
->with(['acars', 'arr_airport', 'dpt_airport', 'comments', 'flight', 'simbrief', 'user'])
->find($id);
return new PirepResource($pirep);
}
/**

View File

@@ -90,7 +90,7 @@ class UserController extends Controller
public function get($id)
{
$user = $this->userRepo
->with(['airline', 'rank'])
->with(['airline', 'bids', 'rank'])
->find($id);
return new UserResource($user);

View File

@@ -27,6 +27,7 @@ class Pirep extends Resource
{
$res = parent::toArray($request);
$res['ident'] = $this->ident;
$res['status_text'] = PirepStatus::label($this->status);
// Set these to the response units
if (!array_key_exists('distance', $res)) {
@@ -62,8 +63,6 @@ class Pirep extends Resource
$res['block_off_time'] = $this->block_off_time->toIso8601ZuluString();
}
$res['status_text'] = PirepStatus::label($this->status);
$res['airline'] = new Airline($this->airline);
$res['dpt_airport'] = new Airport($this->dpt_airport);
$res['arr_airport'] = new Airport($this->arr_airport);
@@ -73,10 +72,13 @@ class Pirep extends Resource
$res['user'] = [
'id' => $this->user->id,
'name' => $this->user->name,
'avatar' => $this->user->resolveAvatarUrl(),
'home_airport_id' => $this->user->home_airport_id,
'curr_airport_id' => $this->user->curr_airport_id,
];
$res['flight'] = Flight::make($this->whenLoaded('flight'));
// format to kvp
$res['fields'] = new PirepFieldCollection($this->fields);

View File

@@ -17,6 +17,7 @@ class User extends Resource
'ident' => $this->ident,
'name' => $this->name,
'email' => $this->email,
'avatar' => $this->resolveAvatarUrl(),
'rank_id' => $this->rank_id,
'home_airport' => $this->home_airport_id,
'curr_airport' => $this->curr_airport_id,
@@ -27,19 +28,9 @@ class User extends Resource
'state' => $this->state,
];
$res['airline'] = Airline::make($this->airline);
$res['airline'] = Airline::make($this->whenLoaded('airline'));
$res['bids'] = UserBid::collection($this->whenLoaded('bids'));
$res['rank'] = Rank::make($this->rank);
/*
* Determine which avatar to send/use
*/
$res['avatar'] = $this->avatar;
if (empty($res['avatar'])) {
$res['avatar'] = $this->gravatar();
} else {
$res['avatar'] = $res['avatar']->url;
}
$res['rank'] = Rank::make($this->whenLoaded('rank'));
return $res;
}

View File

@@ -14,6 +14,7 @@ use Illuminate\Support\Collection;
/**
* @property string id
* @property string ident
* @property string flight_number
* @property string route_code
* @property string route_leg

View File

@@ -170,6 +170,16 @@ class User extends Authenticatable
return $uri;
}
public function resolveAvatarUrl()
{
$avatar = $this->getAvatarAttribute();
if (empty($avatar)) {
return $this->gravatar();
} else {
return $avatar->url;
}
}
/**
* Foreign Keys
*/

View File

@@ -9,9 +9,6 @@ use App\Models\Enums\PirepState;
use App\Models\Pirep;
use Carbon\Carbon;
/**
* Class AcarsRepository
*/
class AcarsRepository extends Repository
{
/**
@@ -59,7 +56,7 @@ class AcarsRepository extends Repository
*/
public function getPositions($live_time = 0)
{
$q = Pirep::with(['airline', 'position', 'aircraft'])
$q = Pirep::with(['aircraft', 'airline', 'arr_airport', 'dpt_airport', 'position', 'user'])
->where(['state' => PirepState::IN_PROGRESS]);
if ($live_time !== null && $live_time > 0) {

View File

@@ -416,7 +416,8 @@ class AcarsTest extends TestCase
*/
$uri = '/api/pireps/'.$pirep_id.'/update';
$this->post($uri, [
'fields' => [
'flight_time' => 60,
'fields' => [
'custom_field' => 'custom_value_changed',
],
]);
@@ -476,7 +477,23 @@ class AcarsTest extends TestCase
$body = $response->json('data');
$this->assertEquals('G26', $body['Departure Gate']);
// File the PIREP now
/*
* Get the live flights and make sure all the fields we want are there
*/
$uri = '/api/acars';
$response = $this->get($uri);
$response->assertStatus(200);
$body = $response->json('data');
$this->assertEquals($pirep->id, $body['id']);
$this->assertNotEmpty($body['user']['name']);
$this->assertNotEmpty($body['user']['avatar']);
/*
* File the PIREP
*/
$uri = '/api/pireps/'.$pirep_id.'/file';
$response = $this->post($uri, []);
$response->assertStatus(400); // missing field