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