From 1aeaaa501606e70b2b65e18d5fe18eed3be0736a Mon Sep 17 00:00:00 2001 From: Nathan Boiron Date: Tue, 3 Mar 2026 12:49:20 +0100 Subject: [PATCH] Ajout de la liste des meetups d'une antenne --- .../Controller/Api/Antennes/GetOneAction.php | 30 ++++++++++++++----- .../Model/Repository/MeetupRepository.php | 18 +++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/sources/AppBundle/Controller/Api/Antennes/GetOneAction.php b/sources/AppBundle/Controller/Api/Antennes/GetOneAction.php index 0df37e52a..9e441f3ab 100644 --- a/sources/AppBundle/Controller/Api/Antennes/GetOneAction.php +++ b/sources/AppBundle/Controller/Api/Antennes/GetOneAction.php @@ -4,7 +4,9 @@ namespace AppBundle\Controller\Api\Antennes; +use AppBundle\Antennes\Antenne; use AppBundle\Antennes\AntenneRepository; +use AppBundle\Event\Model\Meetup; use AppBundle\Event\Model\Repository\MeetupRepository; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -43,16 +45,16 @@ public function __invoke(string $code): JsonResponse $nextMeetup = $this->meetupRepository->findNextForAntenne($antenne); if ($nextMeetup) { - $response['next_meetup'] = [ - 'title' => $nextMeetup->getTitle(), - 'date' => $nextMeetup->getDate()->format('Y-m-d H:i:s'), - 'location' => $nextMeetup->getLocation(), - 'description' => $nextMeetup->getDescription(), - 'url' => 'https://www.meetup.com/fr-FR/' . $antenne->meetup->urlName . '/events/' . $nextMeetup->getId(), - 'photo' => $nextMeetup->getPhotoUrl(), - ]; + $response['next_meetup'] = $this->transformMeetup($antenne, $nextMeetup); } + $allMeetups = $this->meetupRepository->findAllForAntenne($antenne); + + $response['meetups'] = array_map( + fn(Meetup $meetup) => $this->transformMeetup($antenne, $meetup), + iterator_to_array($allMeetups->getIterator()), + ); + return new JsonResponse($response); } @@ -64,4 +66,16 @@ private function createLink(string $prefix, ?string $suffix): ?string return $prefix . $suffix; } + + private function transformMeetup(Antenne $antenne, Meetup $meetup): array + { + return [ + 'title' => $meetup->getTitle(), + 'date' => $meetup->getDate()->format('Y-m-d H:i:s'), + 'location' => $meetup->getLocation(), + 'description' => $meetup->getDescription(), + 'url' => 'https://www.meetup.com/fr-FR/' . $antenne->meetup->urlName . '/events/' . $meetup->getId(), + 'photo' => $meetup->getPhotoUrl(), + ]; + } } diff --git a/sources/AppBundle/Event/Model/Repository/MeetupRepository.php b/sources/AppBundle/Event/Model/Repository/MeetupRepository.php index f882a967d..d911bce00 100644 --- a/sources/AppBundle/Event/Model/Repository/MeetupRepository.php +++ b/sources/AppBundle/Event/Model/Repository/MeetupRepository.php @@ -7,6 +7,7 @@ use AppBundle\Antennes\Antenne; use AppBundle\Event\Model\Meetup; use Aura\SqlQuery\Common\SelectInterface; +use CCMBenchmark\Ting\Repository\CollectionInterface; use CCMBenchmark\Ting\Repository\HydratorSingleObject; use CCMBenchmark\Ting\Repository\Metadata; use CCMBenchmark\Ting\Repository\MetadataInitializer; @@ -43,6 +44,23 @@ public function findNextForAntenne(Antenne $antenne): ?Meetup ->first(); } + public function findAllForAntenne(Antenne $antenne): ?CollectionInterface + { + /** @var SelectInterface $qb */ + $qb = $this->getQueryBuilder(self::QUERY_SELECT); + $qb + ->from('afup_meetup m') + ->cols(['m.*']) + ->where('m.antenne_name = :name') + ; + + return $this->getPreparedQuery($qb->getStatement()) + ->setParams([ + 'name' => $antenne->code, + ]) + ->query($this->getCollection(new HydratorSingleObject())); + } + /** * * @return Metadata