diff --git a/app/Http/Controllers/Api/MeetupEventController.php b/app/Http/Controllers/Api/MeetupEventController.php index 0e1bf5f..91ca352 100644 --- a/app/Http/Controllers/Api/MeetupEventController.php +++ b/app/Http/Controllers/Api/MeetupEventController.php @@ -59,10 +59,13 @@ class MeetupEventController extends Controller ->get(); return $events->map(fn ($event) => [ + 'id' => $event->id, 'start' => $event->start->format('Y-m-d H:i'), 'location' => $event->location, 'description' => $event->description, 'link' => $event->link, + 'attendees' => $event->attendeesCount(), + 'might_attendees' => $event->mightAttendeesCount(), 'meetup.name' => $event->meetup->name, 'meetup.portalLink' => url()->route( 'meetups.landingpage', @@ -202,8 +205,8 @@ class MeetupEventController extends Controller { return [ 'status' => $meetupEvent->rsvpStatusFor($user)->value, - 'attendees' => count($meetupEvent->attendees ?? []), - 'might_attendees' => count($meetupEvent->might_attendees ?? []), + 'attendees' => $meetupEvent->attendeesCount(), + 'might_attendees' => $meetupEvent->mightAttendeesCount(), ]; } } diff --git a/app/Models/Meetup.php b/app/Models/Meetup.php index 647ae1b..b93e247 100644 --- a/app/Models/Meetup.php +++ b/app/Models/Meetup.php @@ -272,8 +272,8 @@ class Meetup extends Model implements HasMedia 'location' => $nextEvent->location, 'description' => $nextEvent->description, 'link' => $nextEvent->link, - 'attendees' => count($nextEvent->attendees ?? []), - 'might_attendees' => count($nextEvent->might_attendees ?? []), + 'attendees' => $nextEvent->attendeesCount(), + 'might_attendees' => $nextEvent->mightAttendeesCount(), 'nostr_note' => str($nextEvent->nostr_status)->after('Sent event ')->before(' to '), ] : null, ); diff --git a/app/Models/MeetupEvent.php b/app/Models/MeetupEvent.php index 1cff8c6..a954d5f 100644 --- a/app/Models/MeetupEvent.php +++ b/app/Models/MeetupEvent.php @@ -65,6 +65,19 @@ class MeetupEvent extends Model return $this->belongsTo(Meetup::class); } + /** + * Anzahl der Zusagen bzw. Vielleicht-Sagen (die Listen sind JSON-Arrays). + */ + public function attendeesCount(): int + { + return count($this->attendees ?? []); + } + + public function mightAttendeesCount(): int + { + return count($this->might_attendees ?? []); + } + /** * Eindeutige Kennung eines angemeldeten Nutzers in den Teilnehmer-Listen. * Einträge werden als `id_|` abgelegt; der angehängte Pipe diff --git a/tests/Feature/Api/MeetupApiTest.php b/tests/Feature/Api/MeetupApiTest.php index 8bb751c..79c9ef3 100644 --- a/tests/Feature/Api/MeetupApiTest.php +++ b/tests/Feature/Api/MeetupApiTest.php @@ -80,7 +80,9 @@ it('returns meetup events as JSON on GET /api/meetup-events', function () { $response = $this->getJson('/api/meetup-events'); - $response->assertSuccessful(); + $response->assertSuccessful() + // id + Zähler werden für das RSVP im mobilen Slide-In gebraucht. + ->assertJsonStructure([['id', 'start', 'attendees', 'might_attendees', 'meetup.name']]); expect($response->json())->toBeArray()->not->toBeEmpty(); });