2020-01-13 00:25:14 +08:00
|
|
|
<?php namespace BookStack\Http\Controllers\Api;
|
|
|
|
|
|
|
|
use BookStack\Api\ApiDocsGenerator;
|
|
|
|
use Cache;
|
|
|
|
use Illuminate\Support\Collection;
|
|
|
|
|
|
|
|
class ApiDocsController extends ApiController
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load the docs page for the API.
|
|
|
|
*/
|
|
|
|
public function display()
|
|
|
|
{
|
|
|
|
$docs = $this->getDocs();
|
2020-01-16 04:18:02 +08:00
|
|
|
return view('api-docs.index', [
|
|
|
|
'docs' => $docs,
|
|
|
|
]);
|
2020-01-13 00:25:14 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Show a JSON view of the API docs data.
|
|
|
|
*/
|
|
|
|
public function json() {
|
|
|
|
$docs = $this->getDocs();
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|