From 79eb4b1d83cdbfd8df19672af892267b2edeece6 Mon Sep 17 00:00:00 2001 From: Tuhin Bepari Date: Sun, 2 Dec 2018 11:49:23 +0000 Subject: [PATCH] working with API documentaion . Now its moved optional --- .../templates/controller/api/destroy.txt | 19 +------- .../templates/controller/api/docs/destroy.txt | 19 ++++++++ .../templates/controller/api/docs/index.txt | 13 ++++++ .../templates/controller/api/docs/show.txt | 17 +++++++ .../templates/controller/api/docs/store.txt | 14 ++++++ .../templates/controller/api/docs/update.txt | 15 ++++++ resources/templates/controller/api/index.txt | 14 +----- .../controller/api/parent/destroy.txt | 24 +--------- .../controller/api/parent/docs/destroy.txt | 19 ++++++++ .../controller/api/parent/docs/index.txt | 14 ++++++ .../controller/api/parent/docs/show.txt | 17 +++++++ .../controller/api/parent/docs/store.txt | 16 +++++++ .../controller/api/parent/docs/update.txt | 16 +++++++ .../templates/controller/api/parent/index.txt | 15 +----- .../templates/controller/api/parent/show.txt | 21 +-------- .../templates/controller/api/parent/store.txt | 17 +------ .../controller/api/parent/update.txt | 21 +-------- resources/templates/controller/api/show.txt | 20 +------- resources/templates/controller/api/store.txt | 15 +----- resources/templates/controller/api/update.txt | 19 +------- src/config/laracrud.php | 5 ++ src/lara-crud/Crud/Controller.php | 46 +++++++++++-------- 22 files changed, 207 insertions(+), 189 deletions(-) create mode 100644 resources/templates/controller/api/docs/destroy.txt create mode 100644 resources/templates/controller/api/docs/index.txt create mode 100644 resources/templates/controller/api/docs/show.txt create mode 100644 resources/templates/controller/api/docs/store.txt create mode 100644 resources/templates/controller/api/docs/update.txt create mode 100644 resources/templates/controller/api/parent/docs/destroy.txt create mode 100644 resources/templates/controller/api/parent/docs/index.txt create mode 100644 resources/templates/controller/api/parent/docs/show.txt create mode 100644 resources/templates/controller/api/parent/docs/store.txt create mode 100644 resources/templates/controller/api/parent/docs/update.txt diff --git a/resources/templates/controller/api/destroy.txt b/resources/templates/controller/api/destroy.txt index ebe4bdd..8205574 100755 --- a/resources/templates/controller/api/destroy.txt +++ b/resources/templates/controller/api/destroy.txt @@ -1,21 +1,4 @@ - /** - * Delete an existing @@modelName@@ - * - * @Delete("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("id", description="The primary key of @@modelName@@",type="integer", required=true) - * }) - * @Transaction({ - * @Response(200, body={ - * "status": 200, - * "message": "@@modelName@@ successfully deleted" - * }), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}), - * @Response(500, body={"message": "Error occurred while deleting @@modelName@@"}) - * }) - */ +@@documentation@@ public function destroy(@@requestClass@@ $request, $@@modelNameParam@@) { $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); diff --git a/resources/templates/controller/api/docs/destroy.txt b/resources/templates/controller/api/docs/destroy.txt new file mode 100644 index 0000000..875eef7 --- /dev/null +++ b/resources/templates/controller/api/docs/destroy.txt @@ -0,0 +1,19 @@ + /** + * Delete an existing @@modelName@@ + * + * @Delete("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("id", description="The primary key of @@modelName@@",type="integer", required=true) + * }) + * @Transaction({ + * @Response(200, body={ + * "status": 200, + * "message": "@@modelName@@ successfully deleted" + * }), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}), + * @Response(500, body={"message": "Error occurred while deleting @@modelName@@"}) + * }) + */ + diff --git a/resources/templates/controller/api/docs/index.txt b/resources/templates/controller/api/docs/index.txt new file mode 100644 index 0000000..5bb766f --- /dev/null +++ b/resources/templates/controller/api/docs/index.txt @@ -0,0 +1,13 @@ + /** + * List of @@modelName@@ + * + * @Get("/") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("page", description="The page of results to view.", type="integer", default=1) + * }) + * @Response(200, body={ + "data": {{@@apiResponse@@}} + }) + */ diff --git a/resources/templates/controller/api/docs/show.txt b/resources/templates/controller/api/docs/show.txt new file mode 100644 index 0000000..b38d3cf --- /dev/null +++ b/resources/templates/controller/api/docs/show.txt @@ -0,0 +1,17 @@ + /** + * Show details about a @@modelName@@ + * + * @Get("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("id", description="The primary key of @@modelName@@",type="integer", required=true) + * }) + * @Transaction({ + * @Response(200, body={ + * "data": {@@apiResponse@@} + * }), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) + * }) + */ + diff --git a/resources/templates/controller/api/docs/store.txt b/resources/templates/controller/api/docs/store.txt new file mode 100644 index 0000000..ff213f9 --- /dev/null +++ b/resources/templates/controller/api/docs/store.txt @@ -0,0 +1,14 @@ + /** + * Create a @@modelName@@ + * + * + * @Post("/store") + * + * @Versions({"v1"}) + * @Transaction({ + * @Request(@@apiRequest@@), + * @Response(200, body=@@apiResponse@@), + * @Response(500, body={"message": "Error occurred while saving @@modelName@@"}) + * }) + */ + diff --git a/resources/templates/controller/api/docs/update.txt b/resources/templates/controller/api/docs/update.txt new file mode 100644 index 0000000..4143de3 --- /dev/null +++ b/resources/templates/controller/api/docs/update.txt @@ -0,0 +1,15 @@ + /** + * Update a existing @@modelName@@ + * + * @Put("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) + * }) + * @Transaction({ + * @Request(@@apiRequest@@), + * @Response(200, body=@@apiResponse@@), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) + * }) + */ diff --git a/resources/templates/controller/api/index.txt b/resources/templates/controller/api/index.txt index 308ba22..794000a 100755 --- a/resources/templates/controller/api/index.txt +++ b/resources/templates/controller/api/index.txt @@ -1,16 +1,4 @@ - /** - * List of @@modelName@@ - * - * @Get("/") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("page", description="The page of results to view.", type="integer", default=1) - * }) - * @Response(200, body={ - "data": {{@@apiResponse@@}} - }) - */ +@@documentation@@ public function index(@@requestClass@@ $request) { return $this->response->paginator(@@modelName@@::paginate(10), new @@transformer@@()); diff --git a/resources/templates/controller/api/parent/destroy.txt b/resources/templates/controller/api/parent/destroy.txt index 17d077c..43a45bf 100644 --- a/resources/templates/controller/api/parent/destroy.txt +++ b/resources/templates/controller/api/parent/destroy.txt @@ -1,26 +1,6 @@ - /** - * Delete an existing @@modelName@@ - * - * @Delete("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), - * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) - * }) - * @Transaction({ - * @Response(200, body={ - * "status": 200, - * "message": "@@modelName@@ successfully deleted" - * }), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}), - * @Response(500, body={"message": "Error occurred while deleting @@modelName@@"}) - * }) - */ - public function destroy(@@requestClass@@ $request, $@@parentModelNameParam@@, $@@modelNameParam@@) +@@documentation@@ + public function destroy(@@requestClass@@ $request, $@@parentModelNameParam@@, @@modelName@@ $@@modelNameParam@@) { - $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); - if ($@@modelNameParam@@->delete()) { return $this->response->array(['status' => 200, 'message' => '@@modelName@@ successfully deleted']); } else { diff --git a/resources/templates/controller/api/parent/docs/destroy.txt b/resources/templates/controller/api/parent/docs/destroy.txt new file mode 100644 index 0000000..6223b60 --- /dev/null +++ b/resources/templates/controller/api/parent/docs/destroy.txt @@ -0,0 +1,19 @@ + /** + * Delete an existing @@modelName@@ + * + * @Delete("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), + * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) + * }) + * @Transaction({ + * @Response(200, body={ + * "status": 200, + * "message": "@@modelName@@ successfully deleted" + * }), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}), + * @Response(500, body={"message": "Error occurred while deleting @@modelName@@"}) + * }) + */ diff --git a/resources/templates/controller/api/parent/docs/index.txt b/resources/templates/controller/api/parent/docs/index.txt new file mode 100644 index 0000000..c3781fc --- /dev/null +++ b/resources/templates/controller/api/parent/docs/index.txt @@ -0,0 +1,14 @@ + /** + * List of @@modelName@@ + * + * @Get("/") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), + * @Parameter("page", description="The page of results to view.", type="integer", default=1) + * }) + * @Response(200, body={ + "data": {} + }) + */ diff --git a/resources/templates/controller/api/parent/docs/show.txt b/resources/templates/controller/api/parent/docs/show.txt new file mode 100644 index 0000000..e834645 --- /dev/null +++ b/resources/templates/controller/api/parent/docs/show.txt @@ -0,0 +1,17 @@ + /** + * Show details about a @@modelName@@ + * + * @Get("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), + * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) + * }) + * @Transaction({ + * @Response(200, body={ + "data": {} + }), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) + * }) + */ diff --git a/resources/templates/controller/api/parent/docs/store.txt b/resources/templates/controller/api/parent/docs/store.txt new file mode 100644 index 0000000..76c06c3 --- /dev/null +++ b/resources/templates/controller/api/parent/docs/store.txt @@ -0,0 +1,16 @@ + /** + * Create a @@modelName@@ + * + * + * @Post("/store") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true) + * }) + * @Transaction({ + * @Request(@@apiRequest@@), + * @Response(200, body=@@apiResponse@@), + * @Response(500, body={"message": "Error occurred while saving @@modelName@@"}) + * }) + */ diff --git a/resources/templates/controller/api/parent/docs/update.txt b/resources/templates/controller/api/parent/docs/update.txt new file mode 100644 index 0000000..5e785ca --- /dev/null +++ b/resources/templates/controller/api/parent/docs/update.txt @@ -0,0 +1,16 @@ + /** + * Update a existing @@modelName@@ + * + * @Put("/{id}") + * + * @Versions({"v1"}) + * @Parameters({ + * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), + * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) + * }) + * @Transaction({ + * @Request(@@apiRequest@@), + * @Response(200, body=@@apiResponse@@), + * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) + * }) + */ diff --git a/resources/templates/controller/api/parent/index.txt b/resources/templates/controller/api/parent/index.txt index 9f23343..d73a6e2 100644 --- a/resources/templates/controller/api/parent/index.txt +++ b/resources/templates/controller/api/parent/index.txt @@ -1,17 +1,4 @@ - /** - * List of @@modelName@@ - * - * @Get("/") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), - * @Parameter("page", description="The page of results to view.", type="integer", default=1) - * }) - * @Response(200, body={ - "data": {} - }) - */ +@@documentation@@ public function index(@@requestClass@@ $request, $@@parentModelNameParam@@) { return $this->response->paginator(@@modelName@@::paginate(10), new @@transformer@@()); diff --git a/resources/templates/controller/api/parent/show.txt b/resources/templates/controller/api/parent/show.txt index 712a51e..009de2a 100644 --- a/resources/templates/controller/api/parent/show.txt +++ b/resources/templates/controller/api/parent/show.txt @@ -1,22 +1,5 @@ - /** - * Show details about a @@modelName@@ - * - * @Get("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), - * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) - * }) - * @Transaction({ - * @Response(200, body={ - "data": {} - }), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) - * }) - */ - public function show(@@requestClass@@ $request, $@@parentModelNameParam@@, $@@modelNameParam@@) +@@documentation@@ + public function show(@@requestClass@@ $request, $@@parentModelNameParam@@, @@modelName@@ $@@modelNameParam@@) { - $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); return $this->response->item($@@modelNameParam@@, new @@transformer@@()); } diff --git a/resources/templates/controller/api/parent/store.txt b/resources/templates/controller/api/parent/store.txt index a235222..203efd1 100644 --- a/resources/templates/controller/api/parent/store.txt +++ b/resources/templates/controller/api/parent/store.txt @@ -1,19 +1,4 @@ - /** - * Create a @@modelName@@ - * - * - * @Post("/store") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true) - * }) - * @Transaction({ - * @Request(@@apiRequest@@), - * @Response(200, body=@@apiResponse@@), - * @Response(500, body={"message": "Error occurred while saving @@modelName@@"}) - * }) - */ + @@documentation@@ public function store(@@requestClass@@ $request, $@@parentModelNameParam@@) { $model=new @@modelName@@; diff --git a/resources/templates/controller/api/parent/update.txt b/resources/templates/controller/api/parent/update.txt index 61b53f3..3f28bd5 100644 --- a/resources/templates/controller/api/parent/update.txt +++ b/resources/templates/controller/api/parent/update.txt @@ -1,24 +1,7 @@ - /** - * Update a existing @@modelName@@ - * - * @Put("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("@@parentModelNameParam@@", description="The primary key of @@parentModelNameParam@@", type="integer", required=true), - * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) - * }) - * @Transaction({ - * @Request(@@apiRequest@@), - * @Response(200, body=@@apiResponse@@), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) - * }) - */ - public function update(@@requestClass@@ $request, $@@parentModelNameParam@@, $@@modelNameParam@@) +@@documentation@@ + public function update(@@requestClass@@ $request, $@@parentModelNameParam@@, @@modelName@@ $@@modelNameParam@@) { - $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); $@@modelNameParam@@->fill($request->all()); - if ($@@modelNameParam@@->save()) { return $this->response->item($@@modelNameParam@@, new @@transformer@@()); } else { diff --git a/resources/templates/controller/api/show.txt b/resources/templates/controller/api/show.txt index c5a20e1..868c73e 100755 --- a/resources/templates/controller/api/show.txt +++ b/resources/templates/controller/api/show.txt @@ -1,21 +1,5 @@ - /** - * Show details about a @@modelName@@ - * - * @Get("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("id", description="The primary key of @@modelName@@",type="integer", required=true) - * }) - * @Transaction({ - * @Response(200, body={ - * "data": {@@apiResponse@@} - * }), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) - * }) - */ - public function show(@@requestClass@@ $request, $@@modelNameParam@@) +@@documentation@@ + public function show(@@requestClass@@ $request, @@modelName@@ $@@modelNameParam@@) { - $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); return $this->response->item($@@modelNameParam@@, new @@transformer@@()); } diff --git a/resources/templates/controller/api/store.txt b/resources/templates/controller/api/store.txt index c2d9522..d67a686 100755 --- a/resources/templates/controller/api/store.txt +++ b/resources/templates/controller/api/store.txt @@ -1,21 +1,8 @@ - /** - * Create a @@modelName@@ - * - * - * @Post("/store") - * - * @Versions({"v1"}) - * @Transaction({ - * @Request(@@apiRequest@@), - * @Response(200, body=@@apiResponse@@), - * @Response(500, body={"message": "Error occurred while saving @@modelName@@"}) - * }) - */ +@@documentation@@ public function store(@@requestClass@@ $request) { $model=new @@modelName@@; $model->fill($request->all()); - if ($model->save()) { return $this->response->item($model, new @@transformer@@()); } else { diff --git a/resources/templates/controller/api/update.txt b/resources/templates/controller/api/update.txt index 1885ebc..3d31cf8 100755 --- a/resources/templates/controller/api/update.txt +++ b/resources/templates/controller/api/update.txt @@ -1,21 +1,6 @@ - /** - * Update a existing @@modelName@@ - * - * @Put("/{id}") - * - * @Versions({"v1"}) - * @Parameters({ - * @Parameter("id", description="The primary key of @@modelName@@", type="integer", required=true) - * }) - * @Transaction({ - * @Request(@@apiRequest@@), - * @Response(200, body=@@apiResponse@@), - * @Response(404, body={"message": "No query results for model [@@fullmodelName@@]."}) - * }) - */ - public function update(@@requestClass@@ $request, $@@modelNameParam@@) + @@documentation@@ + public function update(@@requestClass@@ $request, @@modelName@@ $@@modelNameParam@@) { - $@@modelNameParam@@ = @@modelName@@::findOrFail($@@modelNameParam@@); $@@modelNameParam@@->fill($request->all()); if ($@@modelNameParam@@->save()) { diff --git a/src/config/laracrud.php b/src/config/laracrud.php index b11fb59..7f654ff 100755 --- a/src/config/laracrud.php +++ b/src/config/laracrud.php @@ -172,6 +172,11 @@ */ 'apiNamespace' => 'Http\Controllers\Api', + /** + * API documentation + */ + 'documentation' => false, + /** * After every request class name this world will be added. For example, User will be UserController */ diff --git a/src/lara-crud/Crud/Controller.php b/src/lara-crud/Crud/Controller.php index d697263..bebb9df 100755 --- a/src/lara-crud/Crud/Controller.php +++ b/src/lara-crud/Crud/Controller.php @@ -144,21 +144,8 @@ public function __construct($model, $name = '', $only = '', $api = false, $paren $this->modelName = $model; } if (!empty($parent)) { - if (!class_exists($parent)) { - $parentModel = $this->modelNameSpace . '\\' . $parent; - if (!class_exists($parentModel)) { - throw new \Exception($parent . ' class does not exists'); - } - $this->import[] = $parentModel; - $this->parentModel = $parent; - } else { - $this->import[] = $parent; - $parentClass = new \ReflectionClass($parent); - $this->parentModel = $parentClass->getShortName(); - } - + $this->setParent($parent); } - if (class_exists($this->modelName)) { $this->model = $model = new $this->modelName; $this->table = $model->getTable(); @@ -268,18 +255,24 @@ protected function buildMethods() $saveUpload = ''; $tempMan = new TemplateManager('controller/' . $this->template . '/template.txt', []); foreach ($this->only as $method) { + $documentation = ''; + $requestClass = $this->getRequestClass($method); if ($filePath = $tempMan->getFullPath("controller/" . $this->template . '/' . $method . '.txt')) { if (in_array($method, ['store', 'update'])) { $saveUpload = $this->getUploadScript($method); } - - $requestClass = $this->getRequestClass($method); - $methodTemp = new TemplateManager("controller/" . $this->template . '/' . $method . ".txt", array_merge($this->globalVars(), [ + $vars = array_merge($this->globalVars(), [ 'requestClass' => $requestClass, 'apiRequest' => $this->makeApiRequest($requestClass), - 'saveUpload' => $saveUpload - ])); + 'saveUpload' => $saveUpload, + ]); + if (config('laracrud.controller.documentation') == true && $this->template !== 'web') { + $documentation = (new TemplateManager("controller/" . $this->template . "/docs/" . $method . '.txt', $vars)); + } + + $vars['documentation'] = $documentation; + $methodTemp = new TemplateManager("controller/" . $this->template . '/' . $method . ".txt", $vars); $retTemp .= $methodTemp->get(); } } @@ -407,5 +400,20 @@ protected function getUploadScript($method = 'store') return $retTemp; } + private function setParent($parent) + { + if (!class_exists($parent)) { + $parentModel = $this->modelNameSpace . '\\' . $parent; + if (!class_exists($parentModel)) { + throw new \Exception($parent . ' class does not exists'); + } + $this->import[] = $parentModel; + $this->parentModel = $parent; + } else { + $this->import[] = $parent; + $parentClass = new \ReflectionClass($parent); + $this->parentModel = $parentClass->getShortName(); + } + } } \ No newline at end of file