PermissionRepository.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\Permission;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use App\DTO\PermissionDTO;
  6. class PermissionRepository implements PermissionRepositoryInterface
  7. {
  8. public function __construct(
  9. protected Permission $model
  10. ) {}
  11. public function all(): ?Collection
  12. {
  13. return $this->model->all()->toTree();
  14. }
  15. public function allNoTree(): ?Collection
  16. {
  17. return $this->model->all();
  18. }
  19. public function find(int $id): ?Permission
  20. {
  21. return $this->model->find($id);
  22. }
  23. public function findByScope(string $scope): ?Permission
  24. {
  25. return $this->model->where('scope', $scope)->first();
  26. }
  27. public function update(int $id, PermissionDTO $dto, array $fieldsToUpdate): ?Permission
  28. {
  29. $permission = $this->model->find($id);
  30. $updateFields = array_intersect_key(
  31. $dto->toArray(),
  32. array_flip($fieldsToUpdate)
  33. );
  34. $permission->update($updateFields);
  35. return $permission->fresh();
  36. }
  37. public function store(PermissionDTO $permissionDTO): Permission
  38. {
  39. $permission = $this->model->firstOrNew(attributes: [
  40. 'scope' => $permissionDTO->scope,
  41. 'description' => $permissionDTO->description,
  42. 'bits' => $permissionDTO->bits,
  43. ]);
  44. if ($permissionDTO->parent_id) {
  45. $parent = $this->model->find(id: $permissionDTO->parent_id);
  46. $permission->prependToNode(parent: $parent);
  47. }
  48. $permission->save();
  49. return $permission;
  50. }
  51. public function delete(int $id): bool
  52. {
  53. return $this->model->destroy($id) > 0;
  54. }
  55. }