crowdLists() ->with(['crowdType', 'recipientCompany']) ->withCount('persons') ->get(); return CrowdListResource::collection($crowdLists); } public function store(StoreCrowdListRequest $request, Event $event): JsonResponse { Gate::authorize('create', [CrowdList::class, $event]); $crowdList = $this->crowdListService->create($event, $request->validated(), $request->user()); return $this->created(new CrowdListResource($crowdList->loadCount('persons'))); } public function update(UpdateCrowdListRequest $request, Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('update', [$crowdList, $event]); $crowdList = $this->crowdListService->update($crowdList, $request->validated(), $request->user()); return $this->success(new CrowdListResource($crowdList->loadCount('persons'))); } public function destroy(Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('delete', [$crowdList, $event]); $this->crowdListService->delete($crowdList, request()->user()); return response()->json(null, 204); } public function addPerson(AddPersonToCrowdListRequest $request, Event $event, CrowdList $crowdList): JsonResponse { Gate::authorize('managePerson', [$crowdList, $event]); $person = Person::findOrFail($request->validated('person_id')); $this->crowdListService->addPerson($crowdList, $person, $request->user()); return $this->success(new CrowdListResource($crowdList->fresh()->loadCount('persons'))); } public function removePerson(Event $event, CrowdList $crowdList, Person $person): JsonResponse { Gate::authorize('managePerson', [$crowdList, $event]); $this->crowdListService->removePerson($crowdList, $person, request()->user()); return response()->json(null, 204); } }