UnitInhabitantClassificationService.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Services;
  3. use App\Models\UnitInhabitantClassification;
  4. use App\Models\User;
  5. use Illuminate\Auth\Access\AuthorizationException;
  6. use Illuminate\Database\Eloquent\Collection;
  7. use Illuminate\Support\Facades\Auth;
  8. class UnitInhabitantClassificationService
  9. {
  10. public function findById(int $id): ?UnitInhabitantClassification
  11. {
  12. return UnitInhabitantClassification::find($id);
  13. }
  14. public function create(array $data): UnitInhabitantClassification
  15. {
  16. return UnitInhabitantClassification::create($data);
  17. }
  18. public function update(int $id, array $data): ?UnitInhabitantClassification
  19. {
  20. $model = $this->findById($id);
  21. if (!$model) {
  22. return null;
  23. }
  24. $this->authorizeUnitAccess($model->unit_id);
  25. $model->update($data);
  26. return $model->fresh();
  27. }
  28. public function delete(int $id): bool
  29. {
  30. $model = $this->findById($id);
  31. if (!$model) {
  32. return false;
  33. }
  34. $this->authorizeUnitAccess($model->unit_id);
  35. return $model->delete();
  36. }
  37. //
  38. public function getByUnit(int $unitId): Collection
  39. {
  40. $this->authorizeUnitAccess($unitId);
  41. return UnitInhabitantClassification::where('unit_id', $unitId)
  42. ->orderBy('description')
  43. ->get();
  44. }
  45. public function getSelectList(int $unitId): Collection
  46. {
  47. return UnitInhabitantClassification::where('unit_id', $unitId)
  48. ->orderBy('description')
  49. ->get(['id', 'description', 'acronym', 'unit_id']);
  50. }
  51. //
  52. private function authorizeUnitAccess(int $unitId): void
  53. {
  54. /** @var User $user */
  55. $user = Auth::user();
  56. if ($user->isAdmin()) {
  57. return;
  58. }
  59. $hasUnit = $user->units()->where('units.id', $unitId)->exists();
  60. if (!$hasUnit) {
  61. throw new AuthorizationException('Acesso negado: você não tem permissão para esta unidade.');
  62. }
  63. }
  64. }