Cleaned up api docs implementation, added missing titles

This commit is contained in:
Dan Brown 2020-11-21 17:03:24 +00:00
parent 65ddd16532
commit f76a2a69f7
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 27 additions and 25 deletions

View File

@ -1,7 +1,9 @@
<?php namespace BookStack\Api; <?php namespace BookStack\Api;
use BookStack\Http\Controllers\Api\ApiController; use BookStack\Http\Controllers\Api\ApiController;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use ReflectionClass; use ReflectionClass;
@ -14,10 +16,27 @@ class ApiDocsGenerator
protected $reflectionClasses = []; protected $reflectionClasses = [];
protected $controllerClasses = []; protected $controllerClasses = [];
/**
* Load the docs form the cache if existing
* otherwise generate and store in the cache.
*/
public static function generateConsideringCache(): Collection
{
$appVersion = trim(file_get_contents(base_path('version')));
$cacheKey = 'api-docs::' . $appVersion;
if (Cache::has($cacheKey) && config('app.env') === 'production') {
$docs = Cache::get($cacheKey);
} else {
$docs = (new static())->generate();
Cache::put($cacheKey, $docs, 60 * 24);
}
return $docs;
}
/** /**
* Generate API documentation. * Generate API documentation.
*/ */
public function generate(): Collection protected function generate(): Collection
{ {
$apiRoutes = $this->getFlatApiRoutes(); $apiRoutes = $this->getFlatApiRoutes();
$apiRoutes = $this->loadDetailsFromControllers($apiRoutes); $apiRoutes = $this->loadDetailsFromControllers($apiRoutes);
@ -58,7 +77,7 @@ class ApiDocsGenerator
/** /**
* Load body params and their rules by inspecting the given class and method name. * 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 protected function getBodyParamsFromClass(string $className, string $methodName): ?array
{ {

View File

@ -1,8 +1,6 @@
<?php namespace BookStack\Http\Controllers\Api; <?php namespace BookStack\Http\Controllers\Api;
use BookStack\Api\ApiDocsGenerator; use BookStack\Api\ApiDocsGenerator;
use Cache;
use Illuminate\Support\Collection;
class ApiDocsController extends ApiController class ApiDocsController extends ApiController
{ {
@ -12,7 +10,8 @@ class ApiDocsController extends ApiController
*/ */
public function display() public function display()
{ {
$docs = $this->getDocs(); $docs = ApiDocsGenerator::generateConsideringCache();
$this->setPageTitle(trans('settings.users_api_tokens_docs'));
return view('api-docs.index', [ return view('api-docs.index', [
'docs' => $docs, 'docs' => $docs,
]); ]);
@ -21,27 +20,10 @@ class ApiDocsController extends ApiController
/** /**
* Show a JSON view of the API docs data. * Show a JSON view of the API docs data.
*/ */
public function json() { public function json()
$docs = $this->getDocs(); {
$docs = ApiDocsGenerator::generateConsideringCache();
return response()->json($docs); return response()->json($docs);
} }
/**
* Get the base docs data.
* Checks and uses the system cache for quick re-fetching.
*/
protected function getDocs(): Collection
{
$appVersion = trim(file_get_contents(base_path('version')));
$cacheKey = 'api-docs::' . $appVersion;
if (Cache::has($cacheKey) && config('app.env') === 'production') {
$docs = Cache::get($cacheKey);
} else {
$docs = (new ApiDocsGenerator())->generate();
Cache::put($cacheKey, $docs, 60*24);
}
return $docs;
}
} }

View File

@ -31,6 +31,7 @@ class RecycleBinController extends Controller
{ {
$deletions = Deletion::query()->with(['deletable', 'deleter'])->paginate(10); $deletions = Deletion::query()->with(['deletable', 'deleter'])->paginate(10);
$this->setPageTitle(trans('settings.recycle_bin'));
return view('settings.recycle-bin.index', [ return view('settings.recycle-bin.index', [
'deletions' => $deletions, 'deletions' => $deletions,
]); ]);