Migrate backend to Porto architecture and fix minor bugs
- Fully transitioned the backend to the Porto architectural pattern - Improved code organization and maintainability - Fixed minor bugs and inconsistencies
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AppStructure\UI\WEB\Controllers;
|
||||
|
||||
use App\Containers\AppStructure\Models\Page;
|
||||
use App\Containers\AppStructure\UI\WEB\Transformers\PageResource;
|
||||
use App\Ship\Contracts\SeoServiceInterface;
|
||||
use App\Ship\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class PageController extends Controller
|
||||
{
|
||||
public function __construct(readonly SeoServiceInterface $seoPageProvider){}
|
||||
|
||||
public function render(string $path): \Inertia\Response
|
||||
{
|
||||
// Генерируем уникальный ключ для кеширования
|
||||
$cacheKey = 'page_' . md5($path);
|
||||
|
||||
// Пытаемся получить данные из кеша
|
||||
$page = Cache::remember($cacheKey, now()->addHours(48), function () use ($path) {
|
||||
return Page::where('path', '=', $path)
|
||||
->with('section.pages.section', 'section.mainSection')
|
||||
->first();
|
||||
});
|
||||
|
||||
if ($page === null) {
|
||||
abort(404);
|
||||
}
|
||||
$subSectionPages = $page->section ? PageResource::collection($page->section->pages) : null;
|
||||
|
||||
$seo = $this->seoPageProvider->getSeoForModel($page);
|
||||
|
||||
|
||||
$page = new PageResource($page);
|
||||
|
||||
|
||||
if ($page->code != 200) {
|
||||
abort($page->code);
|
||||
}
|
||||
|
||||
return inertia()->render('Page', [
|
||||
'page' => $page,
|
||||
'subSectionPages' => $subSectionPages,
|
||||
'seo' => $seo,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AppStructure\UI\WEB\Transformers;
|
||||
|
||||
use App\Ship\Resources\JsonResource;
|
||||
|
||||
class PageResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \App\Ship\Requests\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'title' => $this->title,
|
||||
'content' => $this->content,
|
||||
'slug' => $this->slug,
|
||||
'code' => $this->code,
|
||||
'path' => $this->path,
|
||||
'is_url' => $this->is_url,
|
||||
'settings' => $this->settings,
|
||||
'icon' => $this->icon,
|
||||
'section' => $this->section ? $this->section->title : null,
|
||||
'created_at' => $this->created_at->diffforhumans()
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user