PartnerAgreementServiceController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Enums\PartnerAgreementServiceStatusEnum;
  4. use App\Http\Requests\PartnerAgreementServiceRequest;
  5. use App\Http\Requests\UploadMediaRequest;
  6. use App\Http\Resources\MediaResource;
  7. use App\Http\Resources\PartnerAgreementServiceResource;
  8. use App\Services\MediaService;
  9. use App\Services\PartnerAgreementServiceService;
  10. use Illuminate\Http\JsonResponse;
  11. use Illuminate\Http\Request;
  12. class PartnerAgreementServiceController extends Controller
  13. {
  14. public function __construct(
  15. protected PartnerAgreementServiceService $service,
  16. protected MediaService $mediaService,
  17. ) {}
  18. public function indexByPartner(Request $request, int $partnerAgreementId): JsonResponse
  19. {
  20. $status = $request->query('status');
  21. $status = is_string($status) && PartnerAgreementServiceStatusEnum::isValid($status) ? $status : null;
  22. $items = $this->service->getAllByPartner($partnerAgreementId, $request->query('type'), $status);
  23. return $this->successResponse(payload: PartnerAgreementServiceResource::collection($items));
  24. }
  25. public function store(PartnerAgreementServiceRequest $request): JsonResponse
  26. {
  27. $item = $this->service->create($request->validated());
  28. return $this->successResponse(
  29. payload: new PartnerAgreementServiceResource($item),
  30. message: __('messages.created'),
  31. code: 201,
  32. );
  33. }
  34. public function show(int $id): JsonResponse
  35. {
  36. $item = $this->service->findById($id);
  37. return $this->successResponse(payload: new PartnerAgreementServiceResource($item));
  38. }
  39. public function update(PartnerAgreementServiceRequest $request, int $id): JsonResponse
  40. {
  41. $item = $this->service->update($id, $request->validated());
  42. return $this->successResponse(
  43. payload: new PartnerAgreementServiceResource($item),
  44. message: __('messages.updated'),
  45. );
  46. }
  47. public function destroy(int $id): JsonResponse
  48. {
  49. $this->service->delete($id);
  50. return $this->successResponse(message: __('messages.deleted'), code: 204);
  51. }
  52. public function uploadMedia(UploadMediaRequest $request, int $id): JsonResponse
  53. {
  54. $file = $request->file('file');
  55. $mediaType = str_starts_with($file->getMimeType(), 'image/') ? 'imagem' : 'documento';
  56. $media = $this->mediaService->upload($file, 'partner_agreement_service', $id, $mediaType);
  57. return $this->successResponse(payload: new MediaResource($media), code: 201);
  58. }
  59. public function deleteMedia(int $id, int $mediaId): JsonResponse
  60. {
  61. $this->mediaService->delete($mediaId);
  62. return $this->successResponse(message: __('messages.deleted'), code: 204);
  63. }
  64. }