diff --git a/app/Http/Controllers/Api/PirepController.php b/app/Http/Controllers/Api/PirepController.php index d2bd4eaa..4e9ef37c 100644 --- a/app/Http/Controllers/Api/PirepController.php +++ b/app/Http/Controllers/Api/PirepController.php @@ -57,12 +57,13 @@ class PirepController extends RestController 'level', 'route', 'notes', + 'created_at', ]; protected $acarsRepo, - $geoSvc, - $pirepRepo, - $pirepSvc; + $geoSvc, + $pirepRepo, + $pirepSvc; /** * PirepController constructor. @@ -245,8 +246,9 @@ class PirepController extends RestController Log::info('Posting ACARS update', $request->toArray()); $this->validate($request, ['positions' => 'required']); - $positions = $request->post()['positions']; + $positions = $request->post('positions'); + $count = 0; foreach($positions as $position) { try { @@ -258,6 +260,7 @@ class PirepController extends RestController $update = Acars::create($attrs); $update->save(); + ++$count; } catch (\Exception $e) { Log::error($e); } @@ -267,7 +270,7 @@ class PirepController extends RestController $pirep->status = PirepStatus::ENROUTE; $pirep->save(); - return $this->acars_get($id, $request); + return $this->message($count . ' positions added', $count); } /** @@ -275,7 +278,7 @@ class PirepController extends RestController * But rather in a log file. * @param $id * @param Request $request - * @return AcarsLogResource + * @return \Illuminate\Http\JsonResponse * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException */ public function acars_log($id, Request $request) @@ -289,18 +292,24 @@ class PirepController extends RestController Log::info('Posting ACARS log', $request->toArray()); - $attrs = $this->getFromReq($request, [ - 'log' => 'required', - 'lat' => 'nullable', - 'lon' => 'nullable', - 'created_at' => 'nullable', - ], ['pirep_id' => $id, 'type' => AcarsType::LOG]); + $this->validate($request, ['logs' => 'required']); + $logs = $request->post('logs'); - $acars = Acars::create($attrs); - $acars->save(); + $count = 0; + foreach($logs as $log) { + $attrs = $this->getFromReq($log, [ + 'log' => 'required', + 'lat' => 'nullable', + 'lon' => 'nullable', + 'created_at' => 'nullable', + ], ['pirep_id' => $id, 'type' => AcarsType::LOG]); - AcarsLogResource::withoutWrapping(); - return new AcarsLogResource($acars); + $acars = Acars::create($attrs); + $acars->save(); + ++$count; + } + + return $this->message($count . ' logs added', $count); } /** diff --git a/app/Http/Controllers/Api/RestController.php b/app/Http/Controllers/Api/RestController.php index 9e4c2189..85331494 100644 --- a/app/Http/Controllers/Api/RestController.php +++ b/app/Http/Controllers/Api/RestController.php @@ -65,9 +65,14 @@ class RestController * @return bool * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException */ - public function validate(Request $request, $rules) + public function validate($request, $rules) { - $validator = Validator::make($request->all(), $rules); + if($request instanceof Request) { + $validator = Validator::make($request->all(), $rules); + } else { + $validator = Validator::make($request, $rules); + } + if (!$validator->passes()) { throw new BadRequestHttpException($validator->errors(), null, 400); } @@ -80,10 +85,16 @@ class RestController * @param $message * @return \Illuminate\Http\JsonResponse */ - public function message($message) + public function message($message, $count=null) { - return response()->json([ + $attrs = [ 'message' => $message - ]); + ]; + + if($count !== null) { + $attrs['count'] = $count; + } + + return response()->json($attrs); } } diff --git a/app/Routes/api.php b/app/Routes/api.php index 8790730b..1b75c141 100755 --- a/app/Routes/api.php +++ b/app/Routes/api.php @@ -28,12 +28,17 @@ Route::group(['middleware' => ['api.auth']], function () Route::post('pireps/prefile', 'PirepController@prefile'); Route::post('pireps/{id}/file', 'PirepController@file'); - Route::post('pireps/{id}/cancel', 'PirepController@cancel'); + Route::delete('pireps/{id}/cancel', 'PirepController@cancel'); Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson'); Route::get('pireps/{id}/acars/position', 'PirepController@acars_get'); Route::post('pireps/{id}/acars/position', 'PirepController@acars_store'); + + Route::get('pireps/{id}/acars/positions', 'PirepController@acars_get'); + Route::post('pireps/{id}/acars/positions', 'PirepController@acars_store'); + Route::post('pireps/{id}/acars/log', 'PirepController@acars_log'); + Route::post('pireps/{id}/acars/logs', 'PirepController@acars_log'); Route::get('pireps/{id}/route', 'PirepController@route_get'); Route::post('pireps/{id}/route', 'PirepController@route_post'); diff --git a/tests/AcarsTest.php b/tests/AcarsTest.php index e9757c6a..39067be1 100644 --- a/tests/AcarsTest.php +++ b/tests/AcarsTest.php @@ -93,14 +93,10 @@ class AcarsTest extends TestCase # Post an ACARS update $acars = factory(App\Models\Acars::class)->make()->toArray(); unset($acars['id']); + $update = ['positions' => [$acars]]; $response = $this->withHeaders($this->apiHeaders())->post($uri, $update); - $response->assertStatus(200); - - $body = $response->json(); - $this->assertNotNull($body[0]['id']); - $this->assertEquals($pirep_id, $body[0]['pirep_id']); - //$this->assertHasKeys($body, $this->fillableFields(new \App\Models\Acars)); + $response->assertStatus(200)->assertJson(['count' => 1]); # Make sure PIREP state moved into ENROUTE $pirep = $this->getPirep($pirep_id); @@ -140,7 +136,7 @@ class AcarsTest extends TestCase $update = ['positions' => $acars]; $response = $this->withHeaders($this->apiHeaders())->post($uri, $update); - $response->assertStatus(200)->assertJsonCount($acars_count); + $response->assertStatus(200)->assertJson(['count' => $acars_count]); $response = $this->withHeaders($this->apiHeaders())->get($uri); $response->assertStatus(200)->assertJsonCount($acars_count); @@ -224,12 +220,17 @@ class AcarsTest extends TestCase $acars = factory(App\Models\Acars::class)->make(); $post_log = [ - 'log' => $acars->log + 'logs' => [ + ['log' => $acars->log] + ] ]; $uri = '/api/pireps/' . $pirep_id . '/acars/log'; $response = $this->withHeaders($this->apiHeaders())->post($uri, $post_log); - $response->assertStatus(201); + $response->assertStatus(200); + $body = $response->json(); + + $this->assertEquals(1, $body['count']); } /** @@ -302,7 +303,6 @@ class AcarsTest extends TestCase ])->toArray(); $response = $this->withHeaders($this->apiHeaders())->post($uri, $pirep); - #$response = $this->withHeaders($this->headers($user->api_key))->post($uri, $pirep); $response->assertStatus(201); $pirep = $response->json(); diff --git a/tests/PIREPTest.php b/tests/PIREPTest.php index 87bd854f..24ccc620 100644 --- a/tests/PIREPTest.php +++ b/tests/PIREPTest.php @@ -204,7 +204,7 @@ class PIREPTest extends TestCase # Cancel it $uri = '/api/pireps/' . $pirep_id . '/cancel'; - $response = $this->withHeaders($this->apiHeaders())->post($uri, $acars); + $response = $this->withHeaders($this->apiHeaders())->delete($uri, $acars); $response->assertStatus(200); # Should get a 400 when posting an ACARS update