Skip to content

Commit

Permalink
Refactoring for Simbrief not working #1005
Browse files Browse the repository at this point in the history
  • Loading branch information
nabeelio committed Jan 24, 2021
1 parent 101b326 commit bafb81e
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 39 deletions.
13 changes: 10 additions & 3 deletions app/Http/Controllers/Api/FlightController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

use App\Contracts\Controller;
use App\Exceptions\AssetNotFound;
use App\Exceptions\Unauthorized;
use App\Http\Resources\Flight as FlightResource;
use App\Http\Resources\Navdata as NavdataResource;
use App\Models\SimBrief;
use App\Models\User;
use App\Repositories\Criteria\WhereCriteria;
use App\Repositories\FlightRepository;
use App\Services\FareService;
Expand Down Expand Up @@ -152,20 +154,25 @@ public function search(Request $request)
*
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function briefing($id)
public function briefing(string $id)
{
/** @var User $user */
$user = Auth::user();
$w = [
'user_id' => $user->id,
'flight_id' => $id,
'id' => $id,
];

/** @var SimBrief $simbrief */
$simbrief = SimBrief::where($w)->first();

if ($simbrief === null) {
throw new AssetNotFound(new Exception('Flight briefing not found'));
}

if ($simbrief->user_id !== $user->id) {
throw new Unauthorized(new Exception('User cannot access another user\'s simbrief'));
}

return response($simbrief->acars_xml, 200, [
'Content-Type' => 'application/xml',
]);
Expand Down
17 changes: 7 additions & 10 deletions app/Http/Controllers/Api/PirepController.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,20 @@
use App\Models\Enums\PirepStatus;
use App\Models\Pirep;
use App\Models\PirepComment;
use App\Models\SimBrief;
use App\Repositories\AcarsRepository;
use App\Repositories\JournalRepository;
use App\Repositories\PirepRepository;
use App\Services\FareService;
use App\Services\Finance\PirepFinanceService;
use App\Services\PirepService;
use App\Services\SimBriefService;
use App\Services\UserService;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;

/**
* Class PirepController
*/
class PirepController extends Controller
{
private $acarsRepo;
Expand Down Expand Up @@ -93,6 +92,10 @@ protected function parsePirep(Request $request)
$attrs['created_at'] = Carbon::createFromTimeString($attrs['created_at']);
}

if (array_key_exists('submitted_at', $attrs)) {
$attrs['submitted_at'] = Carbon::createFromTimeString($attrs['submitted_at']);
}

if (array_key_exists('updated_at', $attrs)) {
$attrs['updated_at'] = Carbon::createFromTimeString($attrs['updated_at']);
}
Expand Down Expand Up @@ -306,14 +309,8 @@ public function file($pirep_id, FileRequest $request)
}
}

$attrs['state'] = PirepState::PENDING;
$attrs['status'] = PirepStatus::ARRIVED;
$attrs['submitted_at'] = Carbon::now('UTC');

$pirep = $this->pirepRepo->update($attrs, $pirep_id);

try {
$pirep = $this->pirepSvc->create($pirep);
$pirep = $this->pirepSvc->file($pirep, $attrs);
$this->updateFields($pirep, $request);
$this->updateFares($pirep, $request);
} catch (\Exception $e) {
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Resources/SimBrief.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public function toArray($request)
{
return [
'id' => $this->id,
'url' => url(route('api.flights.briefing', ['id' => $this->flight_id])),
'url' => url(route('api.flights.briefing', ['id' => $this->id])),
];
}
}
94 changes: 70 additions & 24 deletions app/Services/PirepService.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class PirepService extends Service
private $airportSvc;
private $geoSvc;
private $pirepRepo;
private $simbriefSvc;
private $simBriefSvc;
private $userSvc;

/**
Expand All @@ -50,7 +50,7 @@ class PirepService extends Service
* @param AirportRepository $airportRepo
* @param AirportService $airportSvc
* @param PirepRepository $pirepRepo
* @param SimBriefService $simbriefSvc
* @param SimBriefService $simBriefSvc
* @param UserService $userSvc
*/
public function __construct(
Expand All @@ -59,15 +59,15 @@ public function __construct(
AircraftRepository $aircraftRepo,
GeoService $geoSvc,
PirepRepository $pirepRepo,
SimBriefService $simbriefSvc,
SimBriefService $simBriefSvc,
UserService $userSvc
) {
$this->airportRepo = $airportRepo;
$this->airportSvc = $airportSvc;
$this->aircraftRepo = $aircraftRepo;
$this->geoSvc = $geoSvc;
$this->pirepRepo = $pirepRepo;
$this->simbriefSvc = $simbriefSvc;
$this->simBriefSvc = $simBriefSvc;
$this->userSvc = $userSvc;
}

Expand Down Expand Up @@ -151,14 +151,6 @@ public function prefile(User $user, array $attrs): Pirep

$pirep->save();

// Check of there is a simbrief_id
if (array_key_exists('simbrief_id', $attrs)) {
$simbrief = SimBrief::find($attrs['simbrief_id']);
if ($simbrief) {
$this->simbriefSvc->attachSimbriefToPirep($pirep, $simbrief);
}
}

return $pirep;
}

Expand Down Expand Up @@ -216,6 +208,72 @@ public function create(Pirep $pirep, array $field_values = []): Pirep
return $pirep;
}

/**
* Finalize a PIREP (meaning it's been filed)
*
* @param Pirep $pirep
* @param array $attrs
* @param array PirepFieldValue[] $field_values
*
* @throws \Exception
*
* @return Pirep
*/
public function file(Pirep $pirep, array $attrs = [], array $field_values = []): Pirep
{
if (empty($field_values)) {
$field_values = [];
}

$attrs['state'] = PirepState::PENDING;
$attrs['status'] = PirepStatus::ARRIVED;
$attrs['submitted_at'] = Carbon::now('UTC');

$this->pirepRepo->update($attrs, $pirep->id);
$pirep->refresh();

// Check if there is a simbrief_id, change it to be set to the PIREP
// at the end of the flight when it's been filed
if (array_key_exists('simbrief_id', $attrs)) {
/** @var SimBrief $simbrief */
$simbrief = SimBrief::find($attrs['simbrief_id']);
if ($simbrief) {
$this->simBriefSvc->attachSimbriefToPirep($pirep, $simbrief);
}
}

// Check the block times. If a block on (arrival) time isn't
// specified, then use the time that it was submitted. It won't
// be the most accurate, but that might be OK
if (!$pirep->block_on_time) {
if ($pirep->submitted_at) {
$pirep->block_on_time = $pirep->submitted_at;
} else {
$pirep->block_on_time = Carbon::now('UTC');
}
}

// Check that there's a submit time
if (!$pirep->submitted_at) {
$pirep->submitted_at = Carbon::now('UTC');
}

// Copy some fields over from Flight if we have it
if ($pirep->flight) {
$pirep->planned_distance = $pirep->flight->distance;
$pirep->planned_flight_time = $pirep->flight->flight_time;
}

$pirep->save();
$pirep->refresh();

if (count($field_values) > 0) {
$this->updateCustomFields($pirep->id, $field_values);
}

return $pirep;
}

/**
* Find if there are duplicates to a given PIREP. Ideally, the passed
* in PIREP hasn't been saved or gone through the create() method
Expand Down Expand Up @@ -316,18 +374,6 @@ public function saveRoute(Pirep $pirep): Pirep
return $pirep;
}

/**
* Alias to submit()
*
* @param \App\Models\Pirep $pirep
*
* @throws \Exception
*/
public function file(Pirep $pirep)
{
return $this->submit($pirep);
}

/**
* Submit the PIREP. Figure out its default state
*
Expand Down
6 changes: 6 additions & 0 deletions tests/AcarsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,18 @@ public function testAircraftNotAtAirport(): void
$this->settingsRepo->store('pireps.restrict_aircraft_to_rank', false);
$this->settingsRepo->store('pireps.restrict_aircraft_to_rank', false);

/** @var User user */
$this->user = factory(User::class)->create([
'curr_airport_id' => 'KJFK',
]);

/** @var Airport $airport */
$airport = factory(Airport::class)->create();

/** @var Airline $airline */
$airline = factory(Airline::class)->create();

/** @var Aircraft $aircraft */
$aircraft = factory(Aircraft::class)->create([
'airport_id' => 'KAUS',
]);
Expand Down
4 changes: 3 additions & 1 deletion tests/PIREPTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -423,14 +423,16 @@ public function testPilotStatusChange()

// Submit two PIREPs
// 1 hour flight times, but the rank should bump up because of the transfer hours
/** @var Pirep $pirep */
$pirep = factory(Pirep::class)->create([
'airline_id' => $user->airline_id,
'user_id' => $user->id,
]);

$this->pirepSvc->create($pirep);
$this->pirepSvc->file($pirep);
$this->pirepSvc->submit($pirep);

/** @var User $user */
$user = User::find($user->id);
$this->assertEquals(UserState::ACTIVE, $user->state);
}
Expand Down

0 comments on commit bafb81e

Please sign in to comment.