user(); if ($user === null || Gate::forUser($user)->denies('create', MeetupEvent::class)) { return Response::error('Nicht berechtigt, einen Meetup-Termin anzulegen.'); } if (! $this->present($request->get('meetup_id'))) { $meetup = $this->resolveInScope( Meetup::query()->associatedWith($user->getAuthIdentifier()), $request, 'Meetups', 'meetup', ); if ($meetup instanceof Response) { return $meetup; } $request->merge(['meetup_id' => $meetup->id]); } $storeRequest = new StoreMeetupEventRequest; $validated = $request->validate( $storeRequest->rules(), $storeRequest->messages(), ); $meetupEvent = MeetupEvent::create($validated); return Response::json(MeetupEventResource::make($meetupEvent->fresh())->resolve()); } /** * @return array */ public function schema(JsonSchema $schema): array { return [ 'meetup' => $schema->string()->description('Name deines Meetups, zu dem der Termin gehört (z. B. "Einundzwanzig Ansbach"). Wird automatisch aufgelöst – sonst zuerst list-my-meetups aufrufen und den Nutzer auswählen lassen.'), 'meetup_id' => $schema->integer()->description('Optional: ID des Meetups, falls bereits bekannt (Alternative zu "meetup").'), 'start' => $schema->string()->description('Startzeitpunkt als Datum/Uhrzeit (z. B. 2026-08-01 18:00:00).')->required(), 'location' => $schema->string()->description('Veranstaltungsort.'), 'description' => $schema->string()->description('Beschreibung des Termins.'), 'link' => $schema->string()->description('Link zum Termin (URL).'), 'recurrence_type' => $schema->string()->description('Wiederholungstyp.'), 'recurrence_day_of_week' => $schema->string()->description('Wochentag der Wiederholung.'), 'recurrence_day_position' => $schema->string()->description('Position des Wochentags im Monat.'), 'recurrence_interval' => $schema->integer()->description('Wiederholungsintervall.'), 'recurrence_end_date' => $schema->string()->description('Enddatum der Wiederholung.'), ]; } }