where('user_id', $request->user()->id) ->withCount('uploads') ->orderByDesc('created_at') ->paginate($request->input('per_page', 15)); return response()->json($events); } public function store(StoreEventRequest $request, CreateEventAction $action): JsonResponse { $event = $action->execute($request->validated(), $request->user()); return response()->json($event->loadCount('uploads'), 201); } public function show(Event $event, Request $request): JsonResponse { $this->authorizeEvent($event, $request); return response()->json($event->loadCount('uploads')); } public function update(UpdateEventRequest $request, Event $event, UpdateEventAction $action): JsonResponse { $this->authorizeEvent($event, $request); $event = $action->execute($event, $request->validated()); return response()->json($event->loadCount('uploads')); } public function destroy(Event $event, Request $request): JsonResponse { $this->authorizeEvent($event, $request); $event->delete(); return response()->json(null, 204); } public function uploads(Event $event, Request $request): JsonResponse { $this->authorizeEvent($event, $request); $uploads = $event->uploads()->orderByDesc('created_at')->paginate($request->input('per_page', 20)); return response()->json($uploads); } protected function authorizeEvent(Event $event, Request $request): void { if ($event->user_id !== $request->user()->id) { abort(404); } } }