category ->query() ->orderby('priority', 'ASC') ->orderby('name', 'ASC'); if (!$this->auth) $categories->visibled(); return (new CategoryCollection($categories->get()))->collection; } public function get(string $slug): CategoryResource { $category = $this->category ->query() ->where('slug', $slug) ->firstOrFail(); if (!$this->auth) $category->visibled(); return new CategoryResource($category); } public function update(Category $category, array $data = []): bool { $data = $this->parseToArray($data); if (!$category->default && $data['default'] === true) $this->unsetDefault(); return $category ->update($data); } public function create(array $data = []): Category { $data = $this->parseToArray($data); if ($data['default'] === true) $this->unsetDefault(); return $this->category ->query() ->create($data); } private function unsetDefault(): void { $this->category ->query() ->where('default', true) ->first()?->update(['default' => false]); } private function parseToArray(array $data = []): array { $toSave = []; if (isset($data['name']) && !empty($data['name'])) $toSave['name'] = $data['name']; if (isset($data['slug']) && !empty($data['slug'])) $toSave['slug'] = $data['slug']; if (isset($data['priority']) && !is_integer($data['priority'])) $toSave['priority'] = (int)$data['priority']; $toSave['default'] = $data['default']; if ($toSave['default'] === true) $toSave['visible'] = true; else $toSave['visible'] = $data['visible']; return $toSave; } }