Files
aroginhealthcare/Modules/Page/app/Repositories/PageRepository.php
2025-08-17 16:23:14 +05:45

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;
}
}
}