PermissionRepository.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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: $id);
  22. }
  23. public function findByScope(string $scope): ?Permission
  24. {
  25. return $this->model->where(column: 'scope', operator: $scope)->first();
  26. }
  27. public function update(PermissionDTO $permissionDTO, int $id): ?Permission
  28. {
  29. $permission = $this->model->find(id: $id);
  30. $permission->update(attributes: [
  31. 'scope' => $permissionDTO->scope,
  32. 'description' => $permissionDTO->description,
  33. 'bits' => $permissionDTO->bits,
  34. 'parent_id' => $permissionDTO->parent_id,
  35. ]);
  36. return $permission;
  37. }
  38. public function store(PermissionDTO $permissionDTO): Permission
  39. {
  40. $permission = $this->model->firstOrNew(attributes: [
  41. 'scope' => $permissionDTO->scope,
  42. 'description' => $permissionDTO->description,
  43. 'bits' => $permissionDTO->bits,
  44. ]);
  45. if ($permissionDTO->parent_id) {
  46. $parent = $this->model->find(id: $permissionDTO->parent_id);
  47. $permission->prependToNode(parent: $parent);
  48. }
  49. $permission->save();
  50. return $permission;
  51. }
  52. public function delete(int $id): bool
  53. {
  54. return $this->model->destroy(ids: $id) > 0;
  55. }
  56. }