UnitPartnerController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Services\UnitPartnerService;
  4. use App\Http\Requests\UnitPartnerRequest;
  5. use App\Http\Resources\UnitPartnerResource;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class UnitPartnerController extends Controller
  10. {
  11. public function __construct(
  12. protected UnitPartnerService $service,
  13. ) {}
  14. public function index(Request $request): JsonResponse
  15. {
  16. if ($request->filled('unit_id')) {
  17. $items = $this->service->getByUnitId($request->integer('unit_id'));
  18. } else {
  19. $items = $this->service->getAll();
  20. }
  21. return $this->successResponse(payload: UnitPartnerResource::collection($items));
  22. }
  23. public function store(UnitPartnerRequest $request): JsonResponse
  24. {
  25. $item = $this->service->create($request->validated());
  26. return $this->successResponse(payload: new UnitPartnerResource($item), message: __('messages.created'), code: 201);
  27. }
  28. public function show(int $id): JsonResponse
  29. {
  30. $item = $this->service->findById($id);
  31. return $this->successResponse(payload: new UnitPartnerResource($item));
  32. }
  33. public function update(UnitPartnerRequest $request, int $id): JsonResponse
  34. {
  35. $item = $this->service->update($id, $request->validated());
  36. return $this->successResponse(payload: new UnitPartnerResource($item), message: __('messages.updated'));
  37. }
  38. public function destroy(int $id): JsonResponse
  39. {
  40. $this->service->delete($id);
  41. return $this->successResponse(message: __('messages.deleted'), code: 204);
  42. }
  43. //
  44. public function indexMe(): JsonResponse
  45. {
  46. $unitId = $this->currentUnitId();
  47. if (!$unitId) {
  48. return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
  49. }
  50. $items = $this->service->getByUnitId($unitId);
  51. return $this->successResponse(payload: UnitPartnerResource::collection($items));
  52. }
  53. public function storeMe(UnitPartnerRequest $request): JsonResponse
  54. {
  55. $unitId = $this->currentUnitId();
  56. if (!$unitId) {
  57. return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
  58. }
  59. $data = $request->validated();
  60. $data['unit_id'] = $unitId;
  61. $item = $this->service->create($data);
  62. return $this->successResponse(payload: new UnitPartnerResource($item), message: __('messages.created'), code: 201);
  63. }
  64. public function updateMe(UnitPartnerRequest $request, int $id): JsonResponse
  65. {
  66. $unitId = $this->currentUnitId();
  67. $item = $this->service->findById($id);
  68. if (!$unitId || !$item || (int) $item->unit_id !== $unitId) {
  69. return $this->errorResponse(message: 'Sócio não encontrado', code: 404);
  70. }
  71. $data = $request->validated();
  72. $data['unit_id'] = $unitId;
  73. $item = $this->service->update($id, $data);
  74. return $this->successResponse(payload: new UnitPartnerResource($item), message: __('messages.updated'));
  75. }
  76. public function destroyMe(int $id): JsonResponse
  77. {
  78. $unitId = $this->currentUnitId();
  79. $item = $this->service->findById($id);
  80. if (!$unitId || !$item || (int) $item->unit_id !== $unitId) {
  81. return $this->errorResponse(message: 'Sócio não encontrado', code: 404);
  82. }
  83. $this->service->delete($id);
  84. return $this->successResponse(message: __('messages.deleted'), code: 204);
  85. }
  86. //
  87. private function currentUnitId(): ?int
  88. {
  89. $user = Auth::user()?->load('units');
  90. return $user?->units->first()?->id;
  91. }
  92. }