Major refactoring and cleanup of ACARS/Pirep API
This commit is contained in:
@@ -4,8 +4,8 @@ use Faker\Generator as Faker;
|
|||||||
|
|
||||||
$factory->define(App\Models\Acars::class, function (Faker $faker) {
|
$factory->define(App\Models\Acars::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'id' => substr($faker->unique()->sha1, 28, 12),
|
'id' => null,
|
||||||
'pirep_id' => '', # fill this out by
|
'pirep_id' => null,
|
||||||
'log' => $faker->text(200),
|
'log' => $faker->text(200),
|
||||||
'lat' => $faker->latitude,
|
'lat' => $faker->latitude,
|
||||||
'lon' => $faker->longitude,
|
'lon' => $faker->longitude,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ $factory->define(App\Models\Pirep::class, function (Faker $faker) {
|
|||||||
static $raw_data;
|
static $raw_data;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => substr($faker->unique()->sha1, 28, 12),
|
'id' => null,
|
||||||
'airline_id' => function () { # OVERRIDE THIS IF NEEDED
|
'airline_id' => function () { # OVERRIDE THIS IF NEEDED
|
||||||
return factory(App\Models\Airline::class)->create()->id;
|
return factory(App\Models\Airline::class)->create()->id;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,14 +2,20 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Models\PirepComment;
|
|
||||||
use Log;
|
|
||||||
use Auth;
|
use Auth;
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
use Log;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
use App\Http\Requests\Acars\CommentRequest;
|
||||||
|
use App\Http\Requests\Acars\FileRequest;
|
||||||
|
use App\Http\Requests\Acars\LogRequest;
|
||||||
|
use App\Http\Requests\Acars\PositionRequest;
|
||||||
|
use App\Http\Requests\Acars\PrefileRequest;
|
||||||
|
use App\Http\Requests\Acars\RouteRequest;
|
||||||
|
|
||||||
use App\Models\Acars;
|
use App\Models\Acars;
|
||||||
use App\Models\Pirep;
|
use App\Models\Pirep;
|
||||||
|
use App\Models\PirepComment;
|
||||||
|
|
||||||
use App\Models\Enums\AcarsType;
|
use App\Models\Enums\AcarsType;
|
||||||
use App\Models\Enums\PirepState;
|
use App\Models\Enums\PirepState;
|
||||||
@@ -52,6 +58,22 @@ class PirepController extends RestController
|
|||||||
$this->pirepSvc = $pirepSvc;
|
$this->pirepSvc = $pirepSvc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a PIREP is cancelled
|
||||||
|
* @param $pirep
|
||||||
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
||||||
|
*/
|
||||||
|
protected function checkCancelled(Pirep $pirep)
|
||||||
|
{
|
||||||
|
if (!$pirep->allowedUpdates()) {
|
||||||
|
throw new BadRequestHttpException('PIREP has been cancelled, comments can\'t be posted');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $id
|
||||||
|
* @return PirepResource
|
||||||
|
*/
|
||||||
public function get($id)
|
public function get($id)
|
||||||
{
|
{
|
||||||
PirepResource::withoutWrapping();
|
PirepResource::withoutWrapping();
|
||||||
@@ -63,35 +85,17 @@ class PirepController extends RestController
|
|||||||
* Once ACARS updates are being processed, then it can go into an 'ENROUTE'
|
* Once ACARS updates are being processed, then it can go into an 'ENROUTE'
|
||||||
* status, and whatever other statuses may be defined
|
* status, and whatever other statuses may be defined
|
||||||
*
|
*
|
||||||
* TODO: Allow extra fields, etc to be set. Aircraft, etc
|
* @param PrefileRequest $request
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
* @return PirepResource
|
||||||
*/
|
*/
|
||||||
public function prefile(Request $request)
|
public function prefile(PrefileRequest $request)
|
||||||
{
|
{
|
||||||
Log::info('PIREP Prefile, user '.Auth::user()->id, $request->post());
|
Log::info('PIREP Prefile, user '.Auth::id(), $request->post());
|
||||||
|
|
||||||
$prefile_rules = [
|
$attrs = $request->post();
|
||||||
'airline_id' => 'required|exists:airlines,id',
|
$attrs['user_id'] = Auth::id();
|
||||||
'aircraft_id' => 'required|exists:aircraft,id',
|
$attrs['state'] = PirepState::IN_PROGRESS;
|
||||||
'dpt_airport_id' => 'required',
|
$attrs['status'] = PirepStatus::PREFILE;
|
||||||
'arr_airport_id' => 'required',
|
|
||||||
'flight_id' => 'nullable',
|
|
||||||
'flight_number' => 'required',
|
|
||||||
'route_code' => 'nullable',
|
|
||||||
'route_leg' => 'nullable',
|
|
||||||
'flight_time' => ['nullable', 'integer'],
|
|
||||||
'planned_flight_time' => ['nullable', 'integer'],
|
|
||||||
'level' => 'required|integer',
|
|
||||||
'route' => 'nullable',
|
|
||||||
'notes' => 'nullable',
|
|
||||||
'created_at' => 'nullable|date',
|
|
||||||
];
|
|
||||||
|
|
||||||
$attrs = $this->getFromReq($request, $prefile_rules, [
|
|
||||||
'user_id' => Auth::user()->id,
|
|
||||||
'state' => PirepState::IN_PROGRESS,
|
|
||||||
'status' => PirepStatus::PREFILE,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$pirep = new Pirep($attrs);
|
$pirep = new Pirep($attrs);
|
||||||
|
|
||||||
@@ -113,47 +117,22 @@ class PirepController extends RestController
|
|||||||
/**
|
/**
|
||||||
* File the PIREP
|
* File the PIREP
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param FileRequest $request
|
||||||
* @return PirepResource
|
* @return PirepResource
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
||||||
* @throws \Illuminate\Database\Eloquent\ModelNotFoundException
|
* @throws \Illuminate\Database\Eloquent\ModelNotFoundException
|
||||||
*/
|
*/
|
||||||
public function file($id, Request $request)
|
public function file($id, FileRequest $request)
|
||||||
{
|
{
|
||||||
Log::info('PIREP file, user ' . Auth::user()->id, $request->post());
|
Log::info('PIREP file, user ' . Auth::id(), $request->post());
|
||||||
|
|
||||||
$pirep = $this->pirepRepo->find($id);
|
|
||||||
if (empty($pirep)) {
|
|
||||||
throw new ModelNotFoundException('PIREP not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if the status is cancelled...
|
# Check if the status is cancelled...
|
||||||
if($pirep->state === PirepState::CANCELLED) {
|
$pirep = $this->pirepRepo->find($id);
|
||||||
throw new BadRequestHttpException('PIREP has been cancelled, updates can\'t be posted');
|
$this->checkCancelled($pirep);
|
||||||
}
|
|
||||||
|
|
||||||
$file_rules = [
|
$attrs = $request->post();
|
||||||
# actual flight time is required
|
$attrs['state'] = PirepState::PENDING;
|
||||||
'flight_time' => ['required', 'integer'],
|
$attrs['status'] = PirepStatus::ARRIVED;
|
||||||
'flight_number' => 'nullable',
|
|
||||||
'dpt_airport_id' => 'nullable',
|
|
||||||
'arr_airport_id' => 'nullable',
|
|
||||||
'airline_id' => 'nullable|exists:airlines,id',
|
|
||||||
'aircraft_id' => 'nullable|exists:aircraft,id',
|
|
||||||
'flight_id' => 'nullable',
|
|
||||||
'route_code' => 'nullable',
|
|
||||||
'route_leg' => 'nullable',
|
|
||||||
'planned_flight_time' => ['nullable', 'integer'],
|
|
||||||
'level' => 'nullable',
|
|
||||||
'route' => 'nullable',
|
|
||||||
'notes' => 'nullable',
|
|
||||||
'created_at' => 'nullable|date',
|
|
||||||
];
|
|
||||||
|
|
||||||
$attrs = $this->getFromReq($request, $file_rules, [
|
|
||||||
'state' => PirepState::PENDING,
|
|
||||||
'status' => PirepStatus::ARRIVED,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$pirep_fields = [];
|
$pirep_fields = [];
|
||||||
if($request->filled('fields')) {
|
if($request->filled('fields')) {
|
||||||
@@ -176,20 +155,15 @@ class PirepController extends RestController
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return PirepResource
|
* @return PirepResource
|
||||||
|
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
||||||
*/
|
*/
|
||||||
public function cancel($id, Request $request)
|
public function cancel($id, Request $request)
|
||||||
{
|
{
|
||||||
Log::info('PIREP Cancel, user ' . Auth::user()->pilot_id, $request->post());
|
Log::info('PIREP Cancel, user ' . Auth::id(), $request->post());
|
||||||
|
|
||||||
$attrs = [
|
$pirep = $this->pirepRepo->update([
|
||||||
'state' => PirepState::CANCELLED,
|
'state' => PirepState::CANCELLED,
|
||||||
];
|
], $id);
|
||||||
|
|
||||||
try {
|
|
||||||
$pirep = $this->pirepRepo->update($attrs, $id);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
Log::error($e);
|
|
||||||
}
|
|
||||||
|
|
||||||
PirepResource::withoutWrapping();
|
PirepResource::withoutWrapping();
|
||||||
return new PirepResource($pirep);
|
return new PirepResource($pirep);
|
||||||
@@ -231,58 +205,32 @@ class PirepController extends RestController
|
|||||||
/**
|
/**
|
||||||
* Post ACARS updates for a PIREP
|
* Post ACARS updates for a PIREP
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param PositionRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
||||||
*/
|
*/
|
||||||
public function acars_store($id, Request $request)
|
public function acars_store($id, PositionRequest $request)
|
||||||
{
|
{
|
||||||
$pirep = $this->pirepRepo->find($id);
|
|
||||||
|
|
||||||
# Check if the status is cancelled...
|
# Check if the status is cancelled...
|
||||||
if ($pirep->state === PirepState::CANCELLED) {
|
$pirep = $this->pirepRepo->find($id);
|
||||||
throw new BadRequestHttpException('PIREP has been cancelled, updates can\'t be posted');
|
$this->checkCancelled($pirep);
|
||||||
}
|
|
||||||
|
|
||||||
Log::info(
|
Log::info(
|
||||||
'Posting ACARS update (user: '.Auth::user()->pilot_id.', pirep id :'.$id.'): ',
|
'Posting ACARS update (user: '.Auth::user()->pilot_id.', pirep id :'.$id.'): ',
|
||||||
$request->post()
|
$request->post()
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->validate($request, ['positions' => 'required']);
|
|
||||||
$positions = $request->post('positions');
|
|
||||||
|
|
||||||
$acars_rules = [
|
|
||||||
'lat' => 'required|numeric',
|
|
||||||
'lon' => 'required|numeric',
|
|
||||||
'altitude' => 'nullable',
|
|
||||||
'level' => 'nullable',
|
|
||||||
'heading' => 'nullable',
|
|
||||||
'vs' => 'nullable',
|
|
||||||
'gs' => 'nullable',
|
|
||||||
'transponder' => 'nullable',
|
|
||||||
'autopilot' => 'nullable',
|
|
||||||
'fuel_flow' => 'nullable',
|
|
||||||
'log' => 'nullable',
|
|
||||||
'created_at' => 'nullable|date',
|
|
||||||
];
|
|
||||||
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
|
$positions = $request->post('positions');
|
||||||
foreach($positions as $position)
|
foreach($positions as $position)
|
||||||
{
|
{
|
||||||
try {
|
$position['pirep_id'] = $id;
|
||||||
$attrs = $this->getFromReq(
|
$position['type'] = AcarsType::FLIGHT_PATH;
|
||||||
$position,
|
|
||||||
$acars_rules,
|
|
||||||
['pirep_id' => $id, 'type' => AcarsType::FLIGHT_PATH]
|
|
||||||
);
|
|
||||||
|
|
||||||
$update = Acars::create($attrs);
|
$update = Acars::create($position);
|
||||||
$update->save();
|
$update->save();
|
||||||
++$count;
|
|
||||||
} catch (\Exception $e) {
|
++$count;
|
||||||
Log::error($e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Change the PIREP status
|
# Change the PIREP status
|
||||||
@@ -296,36 +244,26 @@ class PirepController extends RestController
|
|||||||
* Post ACARS LOG update for a PIREP. These updates won't show up on the map
|
* Post ACARS LOG update for a PIREP. These updates won't show up on the map
|
||||||
* But rather in a log file.
|
* But rather in a log file.
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param LogRequest $request
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
||||||
*/
|
*/
|
||||||
public function acars_log($id, Request $request)
|
public function acars_log($id, LogRequest $request)
|
||||||
{
|
{
|
||||||
$pirep = $this->pirepRepo->find($id);
|
|
||||||
|
|
||||||
# Check if the status is cancelled...
|
# Check if the status is cancelled...
|
||||||
if ($pirep->state === PirepState::CANCELLED) {
|
$pirep = $this->pirepRepo->find($id);
|
||||||
throw new BadRequestHttpException('PIREP has been cancelled, updates can\'t be posted');
|
$this->checkCancelled($pirep);
|
||||||
}
|
|
||||||
|
|
||||||
Log::info('Posting ACARS log', $request->toArray());
|
Log::info('Posting ACARS log, PIREP: '.$id, $request->post());
|
||||||
|
|
||||||
$this->validate($request, ['logs' => 'required']);
|
|
||||||
$logs = $request->post('logs');
|
|
||||||
|
|
||||||
$rules = [
|
|
||||||
'log' => 'required',
|
|
||||||
'lat' => 'nullable',
|
|
||||||
'lon' => 'nullable',
|
|
||||||
'created_at' => 'nullable|date',
|
|
||||||
];
|
|
||||||
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
|
$logs = $request->post('logs');
|
||||||
foreach($logs as $log) {
|
foreach($logs as $log) {
|
||||||
$attrs = $this->getFromReq($log, $rules, ['pirep_id' => $id, 'type' => AcarsType::LOG]);
|
|
||||||
|
|
||||||
$acars = Acars::create($attrs);
|
$log['pirep_id'] = $id;
|
||||||
|
$log['type'] = AcarsType::LOG;
|
||||||
|
|
||||||
|
$acars = Acars::create($log);
|
||||||
$acars->save();
|
$acars->save();
|
||||||
++$count;
|
++$count;
|
||||||
}
|
}
|
||||||
@@ -348,24 +286,20 @@ class PirepController extends RestController
|
|||||||
/**
|
/**
|
||||||
* Add a new comment
|
* Add a new comment
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param CommentRequest $request
|
||||||
* @return PirepCommentResource
|
* @return PirepCommentResource
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
|
||||||
*/
|
*/
|
||||||
public function comments_post($id, Request $request)
|
public function comments_post($id, CommentRequest $request)
|
||||||
{
|
{
|
||||||
$pirep = $this->pirepRepo->find($id);
|
$pirep = $this->pirepRepo->find($id);
|
||||||
if ($pirep->state === PirepState::CANCELLED) {
|
$this->checkCancelled($pirep);
|
||||||
throw new BadRequestHttpException('PIREP has been cancelled, comments can\'t be posted');
|
|
||||||
}
|
|
||||||
|
|
||||||
# validation
|
Log::info('Posting comment, PIREP: '.$id, $request->post());
|
||||||
$this->validate($request, ['comment' => 'required']);
|
|
||||||
|
|
||||||
# Add it
|
# Add it
|
||||||
$comment = new PirepComment($request->post());
|
$comment = new PirepComment($request->post());
|
||||||
$comment->pirep_id = $id;
|
$comment->pirep_id = $id;
|
||||||
$comment->user_id = Auth::user()->id;
|
$comment->user_id = Auth::id();
|
||||||
$comment->save();
|
$comment->save();
|
||||||
|
|
||||||
return new PirepCommentResource($comment);
|
return new PirepCommentResource($comment);
|
||||||
@@ -390,52 +324,25 @@ class PirepController extends RestController
|
|||||||
/**
|
/**
|
||||||
* Post the ROUTE for a PIREP, can be done from the ACARS log
|
* Post the ROUTE for a PIREP, can be done from the ACARS log
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param RouteRequest $request
|
||||||
* @return AcarsRouteResource
|
* @return AcarsRouteResource
|
||||||
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
||||||
*/
|
*/
|
||||||
public function route_post($id, Request $request)
|
public function route_post($id, RouteRequest $request)
|
||||||
{
|
{
|
||||||
$pirep = $this->pirepRepo->find($id);
|
|
||||||
|
|
||||||
# Check if the status is cancelled...
|
# Check if the status is cancelled...
|
||||||
if ($pirep->state === PirepState::CANCELLED) {
|
$pirep = $this->pirepRepo->find($id);
|
||||||
throw new BadRequestHttpException('PIREP has been cancelled, updates can\'t be posted');
|
$this->checkCancelled($pirep);
|
||||||
}
|
|
||||||
|
|
||||||
Log::info('Posting ACARS ROUTE', $request->toArray());
|
Log::info('Posting ROUTE, PIREP: '.$id, $request->post());
|
||||||
|
|
||||||
$this->validate($request, ['route' => 'required']);
|
|
||||||
|
|
||||||
$this->validate($request, [
|
|
||||||
'route.*.name' => 'required',
|
|
||||||
'route.*.order' => 'required|int',
|
|
||||||
'route.*.nav_type' => 'nullable|int',
|
|
||||||
'route.*.lat' => 'required|numeric',
|
|
||||||
'route.*.lon' => 'required|numeric',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$route = $request->post('route', []);
|
$route = $request->post('route', []);
|
||||||
foreach($route as $position) {
|
foreach($route as $position) {
|
||||||
$attrs = [
|
$position['pirep_id'] = $id;
|
||||||
'pirep_id' => $id,
|
$position['type'] = AcarsType::ROUTE;
|
||||||
'type' => AcarsType::ROUTE,
|
|
||||||
'name' => $position['name'],
|
|
||||||
'order' => $position['order'],
|
|
||||||
'lat' => $position['lat'],
|
|
||||||
'lon' => $position['lon'],
|
|
||||||
];
|
|
||||||
|
|
||||||
if(array_key_exists('nav_type', $position)) {
|
$acars = Acars::create($position);
|
||||||
$attrs['nav_type'] = $position['nav_type'];
|
$acars->save();
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$acars = Acars::create($attrs);
|
|
||||||
$acars->save();
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
Log::error($e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->route_get($id, $request);
|
return $this->route_get($id, $request);
|
||||||
|
|||||||
27
app/Http/Requests/Acars/CommentRequest.php
Normal file
27
app/Http/Requests/Acars/CommentRequest.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FileRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class CommentRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true; # Anyone can comment
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'comment' => 'required',
|
||||||
|
'created_at' => 'nullable|date',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
42
app/Http/Requests/Acars/FileRequest.php
Normal file
42
app/Http/Requests/Acars/FileRequest.php
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use Auth;
|
||||||
|
use App\Models\Pirep;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FileRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class FileRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
$pirep = Pirep::findOrFail($this->route('pirep_id'), ['user_id']);
|
||||||
|
return $pirep->user_id === Auth::id();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'flight_time' => 'required|integer',
|
||||||
|
'flight_number' => 'nullable',
|
||||||
|
'dpt_airport_id' => 'nullable',
|
||||||
|
'arr_airport_id' => 'nullable',
|
||||||
|
'airline_id' => 'nullable|exists:airlines,id',
|
||||||
|
'aircraft_id' => 'nullable|exists:aircraft,id',
|
||||||
|
'flight_id' => 'nullable',
|
||||||
|
'route_code' => 'nullable',
|
||||||
|
'route_leg' => 'nullable',
|
||||||
|
'planned_flight_time' => 'nullable|integer',
|
||||||
|
'level' => 'nullable',
|
||||||
|
'route' => 'nullable',
|
||||||
|
'notes' => 'nullable',
|
||||||
|
'created_at' => 'nullable|date',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
33
app/Http/Requests/Acars/LogRequest.php
Normal file
33
app/Http/Requests/Acars/LogRequest.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use Auth;
|
||||||
|
use App\Models\Pirep;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LogRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class LogRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
$pirep = Pirep::findOrFail($this->route('pirep_id'), ['user_id']);
|
||||||
|
return $pirep->user_id === Auth::id();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'logs' => 'required|array',
|
||||||
|
'logs.*.log' => 'required',
|
||||||
|
'logs.*.lat' => 'nullable|numeric',
|
||||||
|
'logs.*.lon' => 'nullable|numeric',
|
||||||
|
'logs.*.created_at' => 'nullable|date',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
app/Http/Requests/Acars/PositionRequest.php
Normal file
40
app/Http/Requests/Acars/PositionRequest.php
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use Auth;
|
||||||
|
use App\Models\Pirep;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PositionRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class PositionRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
$pirep = Pirep::findOrFail($this->route('pirep_id'), ['user_id']);
|
||||||
|
return $pirep->user_id === Auth::id();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'positions' => 'required|array',
|
||||||
|
'positions.*.lat' => 'required|numeric',
|
||||||
|
'positions.*.lon' => 'required|numeric',
|
||||||
|
'positions.*.altitude' => 'nullable|numeric',
|
||||||
|
'positions.*.heading' => 'nullable|integer|between:0,360',
|
||||||
|
'positions.*.vs' => 'nullable',
|
||||||
|
'positions.*.gs' => 'nullable',
|
||||||
|
'positions.*.transponder' => 'nullable',
|
||||||
|
'positions.*.autopilot' => 'nullable',
|
||||||
|
'positions.*.fuel_flow' => 'nullable',
|
||||||
|
'positions.*.log' => 'nullable',
|
||||||
|
'positions.*.created_at' => 'nullable|date',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
app/Http/Requests/Acars/PrefileRequest.php
Normal file
39
app/Http/Requests/Acars/PrefileRequest.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PrefileRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class PrefileRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'airline_id' => 'required|exists:airlines,id',
|
||||||
|
'aircraft_id' => 'required|exists:aircraft,id',
|
||||||
|
'dpt_airport_id' => 'required',
|
||||||
|
'arr_airport_id' => 'required',
|
||||||
|
'flight_id' => 'nullable',
|
||||||
|
'flight_number' => 'required',
|
||||||
|
'route_code' => 'nullable',
|
||||||
|
'route_leg' => 'nullable',
|
||||||
|
'flight_time' => 'nullable|integer',
|
||||||
|
'planned_flight_time' => 'nullable|integer',
|
||||||
|
'level' => 'required|integer',
|
||||||
|
'route' => 'nullable',
|
||||||
|
'notes' => 'nullable',
|
||||||
|
'created_at' => 'nullable|date',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
34
app/Http/Requests/Acars/RouteRequest.php
Normal file
34
app/Http/Requests/Acars/RouteRequest.php
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Acars;
|
||||||
|
|
||||||
|
use App\Models\Pirep;
|
||||||
|
use Auth;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class RouteRequest
|
||||||
|
* @package App\Http\Requests\Acars
|
||||||
|
*/
|
||||||
|
class RouteRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
$pirep = Pirep::findOrFail($this->route('pirep_id'), ['user_id']);
|
||||||
|
return $pirep->user_id === Auth::id();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [
|
||||||
|
'route' => 'required|array',
|
||||||
|
'route.*.name' => 'required',
|
||||||
|
'route.*.order' => 'required|int',
|
||||||
|
'route.*.nav_type' => 'nullable|int',
|
||||||
|
'route.*.lat' => 'required|numeric',
|
||||||
|
'route.*.lon' => 'required|numeric',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,12 @@ class Pirep extends Resource
|
|||||||
$pirep['arr_airport'] = new Airport($this->arr_airport);
|
$pirep['arr_airport'] = new Airport($this->arr_airport);
|
||||||
$pirep['position'] = new Acars($this->position);
|
$pirep['position'] = new Acars($this->position);
|
||||||
$pirep['comments'] = PirepComment::collection($this->comments);
|
$pirep['comments'] = PirepComment::collection($this->comments);
|
||||||
|
$pirep['user'] = [
|
||||||
|
'id' => $this->user->id,
|
||||||
|
'name' => $this->user->name,
|
||||||
|
'home_airport_id' => $this->user->home_airport_id,
|
||||||
|
'curr_airport_id' => $this->user->curr_airport_id,
|
||||||
|
];
|
||||||
|
|
||||||
return $pirep;
|
return $pirep;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class Acars extends BaseModel
|
|||||||
'lat' => 'float',
|
'lat' => 'float',
|
||||||
'lon' => 'float',
|
'lon' => 'float',
|
||||||
'heading' => 'integer',
|
'heading' => 'integer',
|
||||||
'altitude' => 'integer',
|
'altitude' => 'float',
|
||||||
'vs' => 'float',
|
'vs' => 'float',
|
||||||
'gs' => 'float',
|
'gs' => 'float',
|
||||||
'transponder' => 'integer',
|
'transponder' => 'integer',
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Models\Enums\AcarsType;
|
use App\Models\Enums\AcarsType;
|
||||||
|
use App\Models\Enums\PirepState;
|
||||||
use App\Models\Traits\HashId;
|
use App\Models\Traits\HashId;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
@@ -45,6 +46,7 @@ class Pirep extends BaseModel
|
|||||||
];
|
];
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
|
'user_id' => 'integer',
|
||||||
'flight_time' => 'integer',
|
'flight_time' => 'integer',
|
||||||
'planned_flight_time' => 'integer',
|
'planned_flight_time' => 'integer',
|
||||||
'level' => 'integer',
|
'level' => 'integer',
|
||||||
@@ -86,6 +88,20 @@ class Pirep extends BaseModel
|
|||||||
return $flight_id;
|
return $flight_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this PIREP is allowed to be updated
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function allowedUpdates()
|
||||||
|
{
|
||||||
|
if ($this->state === PirepState::CANCELLED) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Foreign Keys
|
* Foreign Keys
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ Route::group([], function()
|
|||||||
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('pireps/{id}', 'PirepController@get');
|
Route::get('pireps/{pirep_id}', 'PirepController@get');
|
||||||
Route::get('pireps/{id}/route', 'PirepController@route_get');
|
Route::get('pireps/{pirep_id}/route', 'PirepController@route_get');
|
||||||
Route::get('pireps/{id}/acars/position', 'PirepController@acars_get');
|
Route::get('pireps/{pirep_id}/acars/position', 'PirepController@acars_get');
|
||||||
Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson');
|
Route::get('pireps/{pirep_id}/acars/geojson', 'PirepController@acars_geojson');
|
||||||
Route::get('pireps/{id}/comments', 'PirepController@comments_get');
|
Route::get('pireps/{pirep_id}/comments', 'PirepController@comments_get');
|
||||||
|
|
||||||
Route::get('status', 'StatusController@status');
|
Route::get('status', 'StatusController@status');
|
||||||
Route::get('version', 'StatusController@status');
|
Route::get('version', 'StatusController@status');
|
||||||
@@ -38,19 +38,19 @@ Route::group([], function()
|
|||||||
Route::group(['middleware' => ['api.auth']], function ()
|
Route::group(['middleware' => ['api.auth']], function ()
|
||||||
{
|
{
|
||||||
Route::post('pireps/prefile', 'PirepController@prefile');
|
Route::post('pireps/prefile', 'PirepController@prefile');
|
||||||
Route::post('pireps/{id}/file', 'PirepController@file');
|
Route::post('pireps/{pirep_id}/file', 'PirepController@file');
|
||||||
Route::delete('pireps/{id}/cancel', 'PirepController@cancel');
|
Route::delete('pireps/{pirep_id}/cancel', 'PirepController@cancel');
|
||||||
|
|
||||||
Route::post('pireps/{id}/acars/position', 'PirepController@acars_store');
|
Route::post('pireps/{pirep_id}/acars/position', 'PirepController@acars_store');
|
||||||
Route::post('pireps/{id}/acars/positions', 'PirepController@acars_store');
|
Route::post('pireps/{pirep_id}/acars/positions', 'PirepController@acars_store');
|
||||||
|
|
||||||
Route::post('pireps/{id}/acars/log', 'PirepController@acars_log');
|
Route::post('pireps/{pirep_id}/acars/log', 'PirepController@acars_log');
|
||||||
Route::post('pireps/{id}/acars/logs', 'PirepController@acars_log');
|
Route::post('pireps/{pirep_id}/acars/logs', 'PirepController@acars_log');
|
||||||
|
|
||||||
Route::post('pireps/{id}/comments', 'PirepController@comments_post');
|
Route::post('pireps/{pirep_id}/comments', 'PirepController@comments_post');
|
||||||
|
|
||||||
Route::post('pireps/{id}/route', 'PirepController@route_post');
|
Route::post('pireps/{pirep_id}/route', 'PirepController@route_post');
|
||||||
Route::delete('pireps/{id}/route', 'PirepController@route_delete');
|
Route::delete('pireps/{pirep_id}/route', 'PirepController@route_delete');
|
||||||
|
|
||||||
Route::get('settings', 'SettingsController@index');
|
Route::get('settings', 'SettingsController@index');
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ class AcarsTest extends TestCase
|
|||||||
|
|
||||||
protected function getPirep($pirep_id)
|
protected function getPirep($pirep_id)
|
||||||
{
|
{
|
||||||
$this->user = factory(App\Models\User::class)->create();
|
|
||||||
$resp = $this ->get('/api/pireps/' . $pirep_id);
|
$resp = $this ->get('/api/pireps/' . $pirep_id);
|
||||||
$resp->assertStatus(200);
|
$resp->assertStatus(200);
|
||||||
return $resp->json();
|
return $resp->json();
|
||||||
@@ -116,6 +115,7 @@ class AcarsTest extends TestCase
|
|||||||
|
|
||||||
$this->assertHasKeys($body, ['airline', 'arr_airport', 'dpt_airport', 'position']);
|
$this->assertHasKeys($body, ['airline', 'arr_airport', 'dpt_airport', 'position']);
|
||||||
$this->assertNotNull($pirep_id);
|
$this->assertNotNull($pirep_id);
|
||||||
|
$this->assertEquals($body['user_id'], $this->user->id);
|
||||||
|
|
||||||
# Check the PIREP state and status
|
# Check the PIREP state and status
|
||||||
$pirep = $this->getPirep($pirep_id);
|
$pirep = $this->getPirep($pirep_id);
|
||||||
@@ -131,13 +131,20 @@ class AcarsTest extends TestCase
|
|||||||
$response->assertStatus(400);
|
$response->assertStatus(400);
|
||||||
|
|
||||||
# Post an ACARS update
|
# Post an ACARS update
|
||||||
$acars = factory(App\Models\Acars::class)->make()->toArray();
|
$acars = factory(App\Models\Acars::class)->make([
|
||||||
unset($acars['id']);
|
'id' => null
|
||||||
|
])->toArray();
|
||||||
|
|
||||||
$update = ['positions' => [$acars]];
|
$update = ['positions' => [$acars]];
|
||||||
$response = $this->post($uri, $update);
|
$response = $this->post($uri, $update);
|
||||||
$response->assertStatus(200)->assertJson(['count' => 1]);
|
$response->assertStatus(200)->assertJson(['count' => 1]);
|
||||||
|
|
||||||
|
# Read that if the ACARS record posted
|
||||||
|
$acars_data = $this->get($uri)->json()[0];
|
||||||
|
$this->assertEquals($acars['lat'], $acars_data['lat']);
|
||||||
|
$this->assertEquals($acars['lon'], $acars_data['lon']);
|
||||||
|
$this->assertEquals($acars['log'], $acars_data['log']);
|
||||||
|
|
||||||
# Make sure PIREP state moved into ENROUTE
|
# Make sure PIREP state moved into ENROUTE
|
||||||
$pirep = $this->getPirep($pirep_id);
|
$pirep = $this->getPirep($pirep_id);
|
||||||
$this->assertEquals(PirepState::IN_PROGRESS, $pirep['state']);
|
$this->assertEquals(PirepState::IN_PROGRESS, $pirep['state']);
|
||||||
@@ -161,7 +168,7 @@ class AcarsTest extends TestCase
|
|||||||
$response->assertStatus(400); // invalid flight time
|
$response->assertStatus(400); // invalid flight time
|
||||||
|
|
||||||
$response = $this->post($uri, ['flight_time' => '130']);
|
$response = $this->post($uri, ['flight_time' => '130']);
|
||||||
$response->assertStatus(200); // invalid flight time
|
$response->assertStatus(200);
|
||||||
|
|
||||||
# Add a comment
|
# Add a comment
|
||||||
$uri = '/api/pireps/'.$pirep_id.'/comments';
|
$uri = '/api/pireps/'.$pirep_id.'/comments';
|
||||||
|
|||||||
@@ -199,6 +199,9 @@ class PIREPTest extends TestCase
|
|||||||
$this->assertFalse($dupe_pirep);
|
$this->assertFalse($dupe_pirep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function testCancelViaAPI()
|
public function testCancelViaAPI()
|
||||||
{
|
{
|
||||||
$this->user = factory(App\Models\User::class)->create();
|
$this->user = factory(App\Models\User::class)->create();
|
||||||
@@ -223,7 +226,10 @@ class PIREPTest extends TestCase
|
|||||||
|
|
||||||
# Should get a 400 when posting an ACARS update
|
# Should get a 400 when posting an ACARS update
|
||||||
$uri = '/api/pireps/' . $pirep_id . '/acars/position';
|
$uri = '/api/pireps/' . $pirep_id . '/acars/position';
|
||||||
$acars = factory(App\Models\Acars::class)->make()->toArray();
|
$acars = factory(App\Models\Acars::class)->make([
|
||||||
|
'pirep_id' => null
|
||||||
|
])->toArray();
|
||||||
|
|
||||||
$response = $this->post($uri, $acars);
|
$response = $this->post($uri, $acars);
|
||||||
$response->assertStatus(400);
|
$response->assertStatus(400);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Services\DatabaseService;
|
||||||
use Carbon\Carbon;
|
|
||||||
use Illuminate\Support\Facades\Mail;
|
|
||||||
|
|
||||||
use Symfony\Component\Process\Process;
|
|
||||||
use Symfony\Component\Process\Exception\ProcessFailedException;
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class TestCase
|
||||||
|
*/
|
||||||
abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@@ -32,11 +30,22 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
return self::$auth_headers;
|
return self::$auth_headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function headers($user)
|
/**
|
||||||
|
* @param $user
|
||||||
|
* @param array $headers
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function headers($user=null, array $headers = []): array
|
||||||
{
|
{
|
||||||
return [
|
if($user !== null) {
|
||||||
'x-api-key' => $user->api_key,
|
$headers['x-api-key'] = $user->api_key;
|
||||||
];
|
} else {
|
||||||
|
if($this->user !== null) {
|
||||||
|
$headers['x-api-key'] = $this->user->api_key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,7 +90,7 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
|
|
||||||
public function addData($file)
|
public function addData($file)
|
||||||
{
|
{
|
||||||
$svc = app('\App\Services\DatabaseService');
|
$svc = app(DatabaseService::class);
|
||||||
$file_path = base_path('tests/data/' . $file . '.yml');
|
$file_path = base_path('tests/data/' . $file . '.yml');
|
||||||
try {
|
try {
|
||||||
$svc->seed_from_yaml_file($file_path);
|
$svc->seed_from_yaml_file($file_path);
|
||||||
@@ -91,7 +100,6 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
|
|
||||||
public function fillableFields(\Illuminate\Database\Eloquent\Model $model)
|
public function fillableFields(\Illuminate\Database\Eloquent\Model $model)
|
||||||
{
|
{
|
||||||
//$klass = new $model();
|
|
||||||
return $model->fillable;
|
return $model->fillable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,18 +124,9 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
*/
|
*/
|
||||||
public function get($uri, array $headers=[], $user=null): \Illuminate\Foundation\Testing\TestResponse
|
public function get($uri, array $headers=[], $user=null): \Illuminate\Foundation\Testing\TestResponse
|
||||||
{
|
{
|
||||||
if($this->user !== null) {
|
$req = parent::get($uri, $this->headers($user, $headers));
|
||||||
$headers = $this->headers($this->user);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($user !== null) {
|
|
||||||
$headers['x-api-key'] = $user->api_key;
|
|
||||||
}
|
|
||||||
|
|
||||||
$req = parent::get($uri, $headers);
|
|
||||||
if($req->isClientError() || $req->isServerError()) {
|
if($req->isClientError() || $req->isServerError()) {
|
||||||
Log::error('Error on '.$uri);
|
Log::error('GET Error: ' . $uri, $req->json());
|
||||||
Log::error($req->json());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $req;
|
return $req;
|
||||||
@@ -138,17 +137,17 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
* @param string $uri
|
* @param string $uri
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param array $headers
|
* @param array $headers
|
||||||
|
* @param null $user
|
||||||
* @return \Illuminate\Foundation\Testing\TestResponse
|
* @return \Illuminate\Foundation\Testing\TestResponse
|
||||||
*/
|
*/
|
||||||
public function post($uri, array $data = [], array $headers = [])
|
public function post($uri, array $data = [], array $headers = [], $user=null)
|
||||||
{
|
{
|
||||||
if (empty($headers)) {
|
$req = parent::post($uri, $data, $this->headers($user, $headers));
|
||||||
if ($this->user !== null) {
|
if ($req->isClientError() || $req->isServerError()) {
|
||||||
$headers = $this->headers($this->user);
|
Log::error('POST Error: ' . $uri, $req->json());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::post($uri, $data, $headers);
|
return $req;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -156,16 +155,16 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
* @param string $uri
|
* @param string $uri
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param array $headers
|
* @param array $headers
|
||||||
|
* @param null $user
|
||||||
* @return \Illuminate\Foundation\Testing\TestResponse
|
* @return \Illuminate\Foundation\Testing\TestResponse
|
||||||
*/
|
*/
|
||||||
public function delete($uri, array $data = [], array $headers = [])
|
public function delete($uri, array $data = [], array $headers = [], $user=null)
|
||||||
{
|
{
|
||||||
if (empty($headers)) {
|
$req = parent::delete($uri, $data, $this->headers($user, $headers));
|
||||||
if ($this->user !== null) {
|
if ($req->isClientError() || $req->isServerError()) {
|
||||||
$headers = $this->headers($this->user);
|
Log::error('DELETE Error: ' . $uri, $req->json());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::delete($uri, $data, $headers);
|
return $req;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user