From a770da961936d3d34a4bb9fd06f705e73a22a6be Mon Sep 17 00:00:00 2001 From: Ezra Obiwale Date: Wed, 3 Jan 2018 11:32:08 +0100 Subject: [PATCH 1/2] Added Model abstract class Ensured loaded relations go with model arrays --- src/Models/Model.php | 24 ++++++++++++++++++++++++ src/Models/WithSoftDeletes.php | 10 +--------- 2 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 src/Models/Model.php diff --git a/src/Models/Model.php b/src/Models/Model.php new file mode 100644 index 0000000..d74f523 --- /dev/null +++ b/src/Models/Model.php @@ -0,0 +1,24 @@ +fillable; + $fillable[] = 'id'; + // Show only fillables + $array = collect(parent::toArray()) + ->only($fillable) + ->all(); + // Add loaded relations + foreach (array_keys($this->relations) as $relation) { + $array[$relation] = $this->$relation; + } + return $array; + } + +} diff --git a/src/Models/WithSoftDeletes.php b/src/Models/WithSoftDeletes.php index 2bd8ce8..ba43676 100644 --- a/src/Models/WithSoftDeletes.php +++ b/src/Models/WithSoftDeletes.php @@ -1,7 +1,7 @@ fillable; - $fillable[] = 'id'; - return collect(parent::toArray()) - ->only($fillable) - ->all(); - } } From b8ff3933c5478939f6c59805d12b7372895d1820 Mon Sep 17 00:00:00 2001 From: Ezra Obiwale Date: Wed, 3 Jan 2018 11:58:49 +0100 Subject: [PATCH 2/2] Made all api responses have key 'status' and at least one of 'message', 'data' or 'errors' --- src/Controllers/Traits/Api.php | 41 +++++++++++++++++++++++------- src/Controllers/Traits/Respond.php | 3 ++- src/Controllers/Traits/Web.php | 22 +++++++++++----- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/Controllers/Traits/Api.php b/src/Controllers/Traits/Api.php index 8469508..46f96b3 100644 --- a/src/Controllers/Traits/Api.php +++ b/src/Controllers/Traits/Api.php @@ -13,6 +13,31 @@ trait Api { use Crud; + /** + * Called when an action is successfully processed. + * + * @param mixed $response + * @param integer $code + * @return Response + */ + protected function success($response, $code = 200) { + $resp = [ + 'status' => array_key_exists('status', $response) ? + $response['status'] : 'ok' + ]; + if (is_array($response)) { + $resp = array_merge($resp, $response); + } + else if (is_string($response)) { + $resp['message'] = $response; + } + else { + $resp['data'] = $response; + } + + return response()->json($resp, $code); + } + protected function indexResponse($data) { return $this->paginatedList($data->toArray()); @@ -20,38 +45,36 @@ protected function indexResponse($data) protected function storeResponse(Model $data) { - return response()->json($data, 201); + return $this->success($data, 201); } protected function showResponse(Model $data) { - return response()->json($data, 200); + return $this->success($data, 200); } protected function updateResponse(Model $data) { - return response()->json($data, 202); + return $this->success($data, 202); } protected function destroyResponse(Model $data) { - return response()->json($data, 202); + return $this->success($data, 202); } protected function forceDestroyResponse(Model $data) { - return response()->json($data, 202); + return $this->success($data, 202); } protected function destroyManyResponse($deletedCount) { - return response()->json([ - "message" => "$deletedCount item(s) deleted successfully" - ], 202); + return $this->success("$deletedCount item(s) deleted successfully", 202); } protected function restoreDestroyedResponse(Model $data) { - return response()->json($data, 202); + return $this->success($data, 202); } } diff --git a/src/Controllers/Traits/Respond.php b/src/Controllers/Traits/Respond.php index d9a276c..a804c79 100644 --- a/src/Controllers/Traits/Respond.php +++ b/src/Controllers/Traits/Respond.php @@ -18,6 +18,7 @@ trait Respond protected function error($message, $errors = null, $code = 400) { $resp = [ + "status" => "error", "message" => $message ]; if ($errors) $resp["errors"] = $errors; @@ -40,7 +41,7 @@ protected function paginatedList(array $items, $code = 200) { $meta['pagination'] = $items; $resp['meta']['pagination'] = $items; } - return response()->json($resp, $code); + return $this->success($resp, $code); } /** diff --git a/src/Controllers/Traits/Web.php b/src/Controllers/Traits/Web.php index 63cde14..d8ca748 100644 --- a/src/Controllers/Traits/Web.php +++ b/src/Controllers/Traits/Web.php @@ -8,6 +8,16 @@ trait Web { use Crud; + + /** + * Called when an action is successfully processed. + * + * @param string $message + * @return Response + */ + protected function success($status) { + return back()->withStatus($status); + } protected function error($message, $errors = null, $code = 400) { @@ -20,31 +30,31 @@ protected function error($message, $errors = null, $code = 400) protected function storeResponse(Model $data) { - return back()->withStatus('Create successful'); + return $this->success('Create successful'); } protected function updateResponse(Model $data) { - return back()->withStatus('Update successful'); + return $this->success('Update successful'); } protected function destroyResponse(Model $data) { - return back()->withStatus('Delete successful'); + return $this->success('Delete successful'); } protected function forceDestroyResponse(Model $data) { - return back()->withStatus('Permanent delete successful'); + return $this->success('Permanent delete successful'); } protected function destroyManyResponse($deletedCount) { - return back()->withStatus("Deleted $deletedCount item(s) successfully"); + return $this->success("Deleted $deletedCount item(s) successfully"); } protected function restoreDestroyedResponse(Model $data) { - return back()->withStatus('Restoration successful'); + return $this->success('Restoration successful'); } }