139 lines
4.2 KiB
PHP
139 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace Modules\Page\app\Repositories;
|
|
|
|
use Illuminate\Support\Str;
|
|
use Modules\Page\app\Models\Page;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Modules\Page\app\Models\PageMeta;
|
|
use Modules\Page\app\Services\FileManagementService;
|
|
|
|
class PageRepository
|
|
{
|
|
public function allPages($perPage = null, $filter = [], $sort = ['by' => 'id', 'sort' => 'ASC'])
|
|
{
|
|
return Page::with('pageMeta')->when(array_keys($filter, true), function ($query) use ($filter) {
|
|
})
|
|
->orderBy($sort['by'], $sort['sort'])
|
|
->paginate($perPage ?: env('PAGE_LIMIT', 999));
|
|
}
|
|
|
|
public function findPageByUuid($uuid)
|
|
{
|
|
return Page::where('uuid', $uuid)->first();
|
|
}
|
|
|
|
public function storePage(array $validated)
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$page = new Page();
|
|
$page->uuid = Str::uuid();
|
|
$page->title = $validated['title'];
|
|
$page->slug = Str::slug($validated['slug']);
|
|
$page->summary = $validated['summary'];
|
|
$page->description = $validated['description'];
|
|
$page->display_order = $validated['display_order'];
|
|
$page->status = $validated['status'];
|
|
$page->code = 'normal';
|
|
$page->save();
|
|
|
|
if (isset($validated['image']) && $validated['image']->isValid()) {
|
|
FileManagementService::storeFile(
|
|
file: $validated['image'],
|
|
uploadedFolderName: 'pages',
|
|
model: $page
|
|
);
|
|
}
|
|
$pageMeta = new PageMeta();
|
|
$pageMeta->uuid = Str::uuid();
|
|
$pageMeta->meta_title = $validated['meta_title'];
|
|
$pageMeta->meta_description = $validated['meta_description'];
|
|
$pageMeta->meta_keywords = $validated['meta_keywords'];
|
|
$page->pageMeta()->save($pageMeta);
|
|
DB::commit();
|
|
|
|
return $page;
|
|
} catch (\Throwable $th) {
|
|
report($th);
|
|
DB::rollback();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function updatePage($validated, $uuid)
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$page = $this->findPageByUuid($uuid);
|
|
|
|
|
|
if (!$page) {
|
|
return null;
|
|
}
|
|
|
|
//-- Update page
|
|
$page->title = $validated['title'];
|
|
$page->slug = Str::slug($validated['slug']);
|
|
$page->summary = $validated['summary'];
|
|
$page->description = $validated['description'];
|
|
$page->display_order = $validated['display_order'];
|
|
$page->status = $validated['status'];
|
|
$page->save();
|
|
|
|
if (isset($validated['image']) && $validated['image']->isValid()) {
|
|
FileManagementService::uploadFile(
|
|
file: $validated['image'],
|
|
uploadedFolderName: 'pages',
|
|
filePath: $page->image_path,
|
|
model: $page
|
|
);
|
|
}
|
|
|
|
|
|
//-- Create or update page meta
|
|
$pageMeta = $page->pageMeta()->firstOrNew([]);
|
|
if (!$pageMeta->exists) {
|
|
$pageMeta->uuid = Str::uuid();
|
|
}
|
|
$pageMeta->meta_title = $validated['meta_title'];
|
|
$pageMeta->meta_description = $validated['meta_description'];
|
|
$pageMeta->meta_keywords = $validated['meta_keywords'];
|
|
$pageMeta->save();
|
|
|
|
DB::commit();
|
|
|
|
return $page;
|
|
} catch (\Throwable $th) {
|
|
report($th);
|
|
DB::rollBack();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function deletePage(string $uuid)
|
|
{
|
|
DB::beginTransaction();
|
|
try {
|
|
$page = $this->findPageByUuid($uuid);
|
|
if (!$page) {
|
|
return null;
|
|
}
|
|
|
|
if ($page->image_path !== null) {
|
|
FileManagementService::deleteFile($page->image_path);
|
|
}
|
|
$page->pageMeta()->delete();
|
|
$page->delete();
|
|
|
|
DB::commit();
|
|
|
|
return $page;
|
|
} catch (\Throwable $th) {
|
|
DB::rollBack();
|
|
report($th);
|
|
return null;
|
|
}
|
|
}
|
|
}
|