crowdLists()->withCount('persons')->get(); return CrowdListResource::collection($crowdLists); } public function store(StoreCrowdListRequest $request, Event $event): JsonResponse { Gate::authorize('create', [CrowdList::class, $event]); $crowdList = $event->crowdLists()->create($request->validated()); return $this->created(new CrowdListResource($crowdList)); } public function update(UpdateCrowdListRequest $request, Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('update', [$crowdList, $event]); $crowdList->update($request->validated()); return $this->success(new CrowdListResource($crowdList->fresh())); } public function destroy(Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('delete', [$crowdList, $event]); $crowdList->delete(); return response()->json(null, 204); } public function addPerson(Request $request, Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('managePerson', [$crowdList, $event]); $validated = $request->validate([ 'person_id' => ['required', 'ulid', 'exists:persons,id'], ]); $crowdList->persons()->syncWithoutDetaching([ $validated['person_id'] => [ 'added_at' => now(), 'added_by_user_id' => $request->user()->id, ], ]); return $this->success(new CrowdListResource($crowdList->fresh()->loadCount('persons'))); } public function removePerson(Event $event, CrowdList $crowdList, Person $person): JsonResponse { Gate::authorize('managePerson', [$crowdList, $event]); $crowdList->persons()->detach($person->id); return response()->json(null, 204); } }