Files
my-projects-website/app/application/app/Http/Controllers/Site/DocumentationController.php

97 lines
3.4 KiB
PHP

<?php declare(strict_types=1);
namespace App\Http\Controllers\Site;
use App\Dto\Service\Site\Documentation;
use App\Services\Site\DocumentationService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
final class DocumentationController extends Controller
{
public function __construct(
private readonly DocumentationService $documentationService,
) { }
public function defaultVersion(Request $request): RedirectResponse | View
{
$project = $request->get('project');
$websiteTranslations = $request->get('websiteTranslations');
$result = $this->documentationService->defaultVersion($project, $request->user());
if ($result->isError()) {
if ($result->getCode() === 404) {
return view('site.projects.documentation.no-default-version', [
'project' => $project,
'websiteTranslations' => $websiteTranslations,
]);
}
$this->errors($result);
}
$url = \App\Enums\Site\ProjectSection::DocumentationVersion->url($project, $websiteTranslations->getLanguage(), ['version' => $result->getVersion()->slug]);
/**
* 302 redirect because the documentation version can change at any time.
*/
return redirect($url, 302);
}
public function index(Request $request): View
{
$documentation = new Documentation(
project: $request->get('project'),
version: $request->get('version'),
websiteTranslations: $request->get('websiteTranslations'),
user: $request->user(),
);
$result = $this->documentationService->index($documentation);
if ($result->isError()) {
$this->errors($result);
}
return view('site.projects.documentation.index', $result->getData());
}
public function category(string $slug, Request $request): View
{
$documentation = new Documentation(
project: $request->get('project'),
version: $request->get('version'),
websiteTranslations: $request->get('websiteTranslations'),
user: $request->user(),
);
$result = $this->documentationService->category($slug, $documentation);
if ($result->isError()) {
$this->errors($result);
}
if ($result->isTranslation()) {
return $this->viewPageWithoutTranslation($result);
}
return view('site.projects.documentation.category', $result->getData());
}
public function view(string $slug, Request $request): View
{
$documentation = new Documentation(
project: $request->get('project'),
version: $request->get('version'),
websiteTranslations: $request->get('websiteTranslations'),
user: $request->user(),
);
$result = $this->documentationService->view($slug, $documentation);
if ($result->isError()) {
$this->errors($result);
}
if ($result->isTranslation()) {
return $this->viewPageWithoutTranslation($result);
}
return view('site.projects.documentation.view', $result->getData());
}
}