EventController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\EventCoverRequest;
  4. use App\Http\Requests\EventRequest;
  5. use App\Http\Requests\UploadMediaRequest;
  6. use App\Http\Resources\EventResource;
  7. use App\Http\Resources\MediaResource;
  8. use App\Services\EventService;
  9. use App\Services\MediaService;
  10. use Illuminate\Http\JsonResponse;
  11. use Illuminate\Http\Request;
  12. class EventController extends Controller
  13. {
  14. public function __construct(
  15. protected EventService $service,
  16. protected MediaService $mediaService,
  17. ) {}
  18. public function index(): JsonResponse
  19. {
  20. $events = $this->service->getAll();
  21. return $this->successResponse(payload: EventResource::collection($events));
  22. }
  23. public function show(int $id): JsonResponse
  24. {
  25. $event = $this->service->findById($id);
  26. if (!$event) {
  27. return $this->errorResponse(message: __('messages.not_found'));
  28. }
  29. return $this->successResponse(payload: new EventResource($event));
  30. }
  31. public function store(EventRequest $request): JsonResponse
  32. {
  33. $event = $this->service->create($request->validated());
  34. return $this->successResponse(
  35. payload: new EventResource($event),
  36. message: __('messages.created'),
  37. code: 201,
  38. );
  39. }
  40. public function update(EventRequest $request, int $id): JsonResponse
  41. {
  42. $event = $this->service->update($id, $request->validated());
  43. if (!$event) {
  44. return $this->errorResponse(message: __('messages.not_found'));
  45. }
  46. return $this->successResponse(
  47. payload: new EventResource($event),
  48. message: __('messages.updated'),
  49. );
  50. }
  51. public function reorder(Request $request): JsonResponse
  52. {
  53. $items = $request->validate([
  54. '*.id' => 'required|integer|exists:events,id',
  55. '*.order' => 'required|integer|min:0',
  56. ]);
  57. $this->service->reorder($items);
  58. return $this->successResponse(message: __('messages.updated'));
  59. }
  60. public function destroy(int $id): JsonResponse
  61. {
  62. $this->service->delete($id);
  63. return $this->successResponse(message: __('messages.deleted'), code: 204);
  64. }
  65. public function uploadCover(EventCoverRequest $request, int $id): JsonResponse
  66. {
  67. $event = $this->service->uploadCover($id, $request->file('image'));
  68. if (!$event) {
  69. return $this->errorResponse(message: __('messages.not_found'));
  70. }
  71. return $this->successResponse(
  72. payload: new EventResource($event),
  73. message: __('messages.updated'),
  74. );
  75. }
  76. public function removeCover(int $id): JsonResponse
  77. {
  78. $event = $this->service->removeCover($id);
  79. if (!$event) {
  80. return $this->errorResponse(message: __('messages.not_found'));
  81. }
  82. return $this->successResponse(
  83. payload: new EventResource($event),
  84. message: __('messages.updated'),
  85. );
  86. }
  87. public function uploadMedia(UploadMediaRequest $request, int $id): JsonResponse
  88. {
  89. $media = $this->mediaService->upload($request->file('file'), 'event', $id, 'imagem');
  90. return $this->successResponse(payload: new MediaResource($media), code: 201);
  91. }
  92. public function deleteMedia(int $id, int $mediaId): JsonResponse
  93. {
  94. $this->mediaService->delete($mediaId);
  95. return $this->successResponse(message: __('messages.deleted'), code: 204);
  96. }
  97. }