Updated repositories

This commit is contained in:
Kamil Niemczycki 2022-02-13 19:55:25 +01:00
parent b0232f39e6
commit 90895be05f
4 changed files with 94 additions and 23 deletions

View File

@ -8,6 +8,7 @@ use App\Http\Resources\CategoryCollection;
use App\Http\Resources\CategoryResource; use App\Http\Resources\CategoryResource;
use App\Models\Category; use App\Models\Category;
use App\Repository\Interfaces\CategoryRepository as CategoryRepositoryInterface; use App\Repository\Interfaces\CategoryRepository as CategoryRepositoryInterface;
use Illuminate\Support\Collection;
class CategoryRepository implements CategoryRepositoryInterface class CategoryRepository implements CategoryRepositoryInterface
{ {
@ -16,7 +17,7 @@ class CategoryRepository implements CategoryRepositoryInterface
private Category $category private Category $category
) {} ) {}
public function all() public function all(): Collection
{ {
$categories = $this->category $categories = $this->category
->query() ->query()
@ -25,7 +26,7 @@ class CategoryRepository implements CategoryRepositoryInterface
return (new CategoryCollection($categories))->collection; return (new CategoryCollection($categories))->collection;
} }
public function get(string $slug) public function get(string $slug): CategoryResource
{ {
$category = $this->category $category = $this->category
->query() ->query()
@ -34,4 +35,35 @@ class CategoryRepository implements CategoryRepositoryInterface
return new CategoryResource($category); return new CategoryResource($category);
} }
public function update(Category $category, array $data = []): bool
{
$data = $this->parseToArray($data);
return $category
->update($data);
}
public function create(array $data = []): Category
{
$data = $this->parseToArray($data);
return $this->category
->query()
->create($data);
}
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['default']) && is_bool($data['default']))
$toSave['default'] = $data['default'];
if (isset($data['visible']) && is_bool($data['visible']))
$toSave['visible'] = $data['visible'];
return $toSave;
}
} }

View File

@ -4,10 +4,16 @@ declare(strict_types=1);
namespace App\Repository\Interfaces; namespace App\Repository\Interfaces;
use App\Http\Resources\CategoryResource;
use App\Models\Category;
use Illuminate\Support\Collection;
interface CategoryRepository interface CategoryRepository
{ {
public function all(); public function all(): Collection;
public function get(string $slug); public function get(string $slug): CategoryResource;
public function update(Category $category, array $data = []): bool;
public function create(array $data = []): Category;
} }

View File

@ -4,10 +4,16 @@ declare(strict_types=1);
namespace App\Repository\Interfaces; namespace App\Repository\Interfaces;
use App\Http\Resources\ProjectResource;
use App\Models\Project;
use Illuminate\Support\Collection;
interface ProjectRepository interface ProjectRepository
{ {
public function all(); public function all(): Collection;
public function get(int $id); public function get(int $id): ProjectResource;
public function update(Project $project, array $data = []): bool;
public function create(array $data = []): Project;
} }

View File

@ -9,6 +9,7 @@ use App\Http\Resources\ProjectResource;
use App\Models\Project; use App\Models\Project;
use App\Repository\Interfaces\ProjectRepository as ProjectRepositoryInterface; use App\Repository\Interfaces\ProjectRepository as ProjectRepositoryInterface;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
class ProjectRepository implements ProjectRepositoryInterface class ProjectRepository implements ProjectRepositoryInterface
{ {
@ -17,7 +18,7 @@ class ProjectRepository implements ProjectRepositoryInterface
private Project $project private Project $project
) {} ) {}
public function all() public function all(): Collection
{ {
$project = $this->project $project = $this->project
->query() ->query()
@ -26,7 +27,7 @@ class ProjectRepository implements ProjectRepositoryInterface
return (new ProjectCollection($project))->collection; return (new ProjectCollection($project))->collection;
} }
public function get(int $id) public function get(int $id): ProjectResource
{ {
$project = $this->project $project = $this->project
->query() ->query()
@ -34,29 +35,55 @@ class ProjectRepository implements ProjectRepositoryInterface
return new ProjectResource($project); return new ProjectResource($project);
} }
public function add(array $data) public function update(Project $project, array $data = []): bool
{ {
$toSave = [ $data = $this->parseToArray($data);
'title' => $data['title'],
'author' => $data['author'],
'release_date' => Carbon::createFromFormat('Y-d-m', $data['release_date']),
'project_url' => $data['project_url'] ?? null,
'project_version' => $data['project_version'] ?? null,
'description' => $data['description'] ?? null
];
if (is_array($data['categories'])) return $project
->update($data);
}
public function create(array $data = []): Project
{
$data = $this->parseToArray($data);
return $this->project
->query()
->create($data);
}
private function parseToArray(array $data = []): array
{
$toSave = [];
if (isset($data['title']))
$toSave['title'] = $data['title'];
if (isset($data['author']))
$toSave['author'] = $data['author'];
if (isset($data['release_date']))
$toSave['release_date'] = Carbon::createFromFormat('Y-d-m', $data['release_date']);
if (isset($data['project_url']))
$toSave['project_url'] = $data['project_url'];
if (isset($data['project_version']))
$toSave['project_version'] = $data['project_version'];
if (isset($data['description']))
$toSave['description'] = $data['description'];
if (isset($data['categories']) && is_array($data['categories']))
$toSave['categories'] = $data['categories']; $toSave['categories'] = $data['categories'];
if (is_array($data['images'])) if (isset($data['images']) && is_array($data['images']))
$toSave['images'] = $data['images']; $toSave['images'] = $data['images'];
if (!empty($data['update_date'])) if (isset($data['update_date']) && !empty($data['update_date']))
$toSave['update_date'] = Carbon::createFromFormat('Y-d-m', $data['update_date']); $toSave['update_date'] = Carbon::createFromFormat('Y-d-m', $data['update_date']);
$this->project return $toSave;
->query()
->create($toSave);
} }
} }