user(); abort_unless($user, 401); $myMeetupIds = $user->meetups->pluck('id'); return Meetup::query() ->select('id', 'name', 'city_id', 'slug') ->with([ 'city.country', ]) ->whereIn('id', $myMeetupIds->toArray()) ->orderBy('name') ->when( $request->search, fn (Builder $query) => $query ->where('name', 'like', "%{$request->search}%") ->orWhereHas('city', fn (Builder $query) => $query->where('cities.name', 'ilike', "%{$request->search}%")), ) ->when( $request->exists('selected'), fn (Builder $query) => $query->whereIn('id', $this->numericIds($request)), fn (Builder $query) => $query->limit(10), ) ->get() ->map(function (Meetup $meetup) { $meetup->profile_image = $meetup->getFirstMediaUrl('logo', 'thumb'); return $meetup; }); } /** * Meetup anlegen * * Erlaubt einem authentifizierten Nutzer, ein Meetup programmatisch anzulegen. * Der Ersteller (created_by) wird automatisch gesetzt. */ #[Response(status: 401, description: 'Nicht authentifiziert.')] #[Response(status: 422, description: 'Validierungsfehler.')] public function store(StoreMeetupRequest $request): JsonResponse { $meetup = Meetup::create($request->validated()); return MeetupResource::make($meetup->fresh()) ->response() ->setStatusCode(\Symfony\Component\HttpFoundation\Response::HTTP_CREATED); } /** * Meetup aktualisieren * * Aktualisiert ein Meetup; nur fuer den Ersteller oder einen Super-Admin. */ #[Response(status: 403, description: 'Nur der Ersteller oder ein Super-Admin darf das Meetup aendern.')] #[Response(status: 422, description: 'Validierungsfehler.')] public function update(UpdateMeetupRequest $request, Meetup $meetup): MeetupResource { $meetup->update($request->validated()); return MeetupResource::make($meetup->fresh()); } /** * Eigene Meetups auflisten * * Liefert alle vom authentifizierten Nutzer erstellten Meetups, alphabetisch sortiert. */ public function mine(Request $request): AnonymousResourceCollection { Gate::authorize('viewAny', Meetup::class); $meetups = Meetup::query() ->where('created_by', $request->user()->id) ->orderBy('name') ->get(); return MeetupResource::collection($meetups); } /** * Eigenes Meetup anzeigen * * Zeigt ein einzelnes, vom authentifizierten Nutzer erstelltes Meetup. */ #[Response(status: 403, description: 'Nur der Ersteller oder ein Super-Admin darf das Meetup sehen.')] public function mineShow(Meetup $meetup): MeetupResource { Gate::authorize('view', $meetup); return MeetupResource::make($meetup); } }