X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/45b5e631e241e7809d8752279d781ec391245423..refs/pull/2515/head:/app/Api/ApiDocsGenerator.php diff --git a/app/Api/ApiDocsGenerator.php b/app/Api/ApiDocsGenerator.php index 41decd23d..2953647bb 100644 --- a/app/Api/ApiDocsGenerator.php +++ b/app/Api/ApiDocsGenerator.php @@ -1,8 +1,11 @@ generate(); + Cache::put($cacheKey, $docs, 60 * 24); + } + return $docs; + } + /** * Generate API documentation. */ - public function generate(): Collection + protected function generate(): Collection { $apiRoutes = $this->getFlatApiRoutes(); $apiRoutes = $this->loadDetailsFromControllers($apiRoutes); @@ -31,9 +51,12 @@ class ApiDocsGenerator protected function loadDetailsFromFiles(Collection $routes): Collection { return $routes->map(function (array $route) { - $exampleResponseFile = base_path('dev/api/responses/' . $route['name'] . '.json'); - $exampleResponse = file_exists($exampleResponseFile) ? file_get_contents($exampleResponseFile) : null; - $route['example_response'] = $exampleResponse; + $exampleTypes = ['request', 'response']; + foreach ($exampleTypes as $exampleType) { + $exampleFile = base_path("dev/api/{$exampleType}s/{$route['name']}.json"); + $exampleContent = file_exists($exampleFile) ? file_get_contents($exampleFile) : null; + $route["example_{$exampleType}"] = $exampleContent; + } return $route; }); } @@ -54,7 +77,7 @@ class ApiDocsGenerator /** * Load body params and their rules by inspecting the given class and method name. - * @throws \Illuminate\Contracts\Container\BindingResolutionException + * @throws BindingResolutionException */ protected function getBodyParamsFromClass(string $className, string $methodName): ?array { @@ -114,6 +137,7 @@ class ApiDocsGenerator 'method' => $route->methods[0], 'controller' => $controller, 'controller_method' => $controllerMethod, + 'controller_method_kebab' => Str::kebab($controllerMethod), 'base_model' => $baseModelName, ]; });