Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions db/migrations/20260302194613_add_photo_url_to_meetup_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class AddPhotoUrlToMeetupTable extends AbstractMigration
{
public function change(): void
{
$this->table('afup_meetup')
->addColumn('photo_url', 'string', [
'null' => true,
])
->update();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$existingMeetup->setDescription($meetup->getDescription());
$existingMeetup->setLocation($meetup->getLocation());
$existingMeetup->setDate($meetup->getDate());
$existingMeetup->setPhotoUrl($meetup->getPhotoUrl());

// On doit remplacer la variable, car l'ORM a une référence vers l'instance récupérée
// via le get et pas celle de la boucle.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public function __invoke(string $code): JsonResponse
'location' => $nextMeetup->getLocation(),
'description' => $nextMeetup->getDescription(),
'url' => 'https://www.meetup.com/fr-FR/' . $antenne->meetup->urlName . '/events/' . $nextMeetup->getId(),
'photo' => $nextMeetup->getPhotoUrl(),
];
}

Expand Down
13 changes: 13 additions & 0 deletions sources/AppBundle/Event/Model/Meetup.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class Meetup implements NotifyPropertyInterface
*/
private $antenneName;

private ?string $photoUrl = null;

/**
* @return int
*/
Expand Down Expand Up @@ -155,4 +157,15 @@ public function setAntenneName($antenneName): self

return $this;
}

public function getPhotoUrl(): ?string
{
return $this->photoUrl;
}

public function setPhotoUrl(?string $photoUrl): void
{
$this->propertyChanged('photoUrl', $this->photoUrl, $photoUrl);
$this->photoUrl = $photoUrl;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
'columnName' => 'antenne_name',
'fieldName' => 'antenneName',
'type' => 'string',
])
->addField([
'columnName' => 'photo_url',
'fieldName' => 'photoUrl',
'type' => 'string',
]);

return $metadata;
Expand Down
6 changes: 2 additions & 4 deletions sources/AppBundle/Indexation/Meetups/GraphQL/Node.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@

final readonly class Node
{
/**
* @param array<Venue> $venues
*/
public function __construct(
public string $id,
public string $title,
public string $description,
public DateTime $dateTime,
public array $venues,
public Venue $venue,
public Photo $displayPhoto,
) {}
}
10 changes: 10 additions & 0 deletions sources/AppBundle/Indexation/Meetups/GraphQL/Photo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

namespace AppBundle\Indexation\Meetups\GraphQL;

final readonly class Photo
{
public function __construct(public string $standardUrl) {}
}
2 changes: 1 addition & 1 deletion sources/AppBundle/Indexation/Meetups/GraphQL/Venue.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@

final readonly class Venue
{
public function __construct(public string $name) {}
public function __construct(public ?string $name) {}
}
9 changes: 4 additions & 5 deletions sources/AppBundle/Indexation/Meetups/MeetupClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,8 @@ public function getEvents(): array
$meetup->setDescription($edge->node->description);
$meetup->setDate($edge->node->dateTime);
$meetup->setAntenneName($nameAntenne);

if (($edge->node->venues[0] ?? null) !== null) {
$meetup->setLocation($edge->node->venues[0]->name);
}
$meetup->setLocation($edge->node->venue->name);
$meetup->setPhotoUrl($edge->node->displayPhoto->standardUrl);

$meetups[] = $meetup;
}
Expand Down Expand Up @@ -93,7 +91,8 @@ private function getEventsQuery(): string
title
description
dateTime
venues { name }
venue { name }
displayPhoto { standardUrl }
}

fragment GroupFragment on Group {
Expand Down
34 changes: 24 additions & 10 deletions tests/unit/AppBundle/Indexation/Meetups/MeetupClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,11 @@ public function testReturnsValidResponse(): void
'title' => 'Upcoming 1',
'description' => 'Desc 1',
'dateTime' => '2025-02-11T18:30:00+01:00',
'venues' => [
[
'name' => 'Lieu 1',
],
'venue' => [
'name' => 'Lieu 1',
],
'displayPhoto' => [
'standardUrl' => 'https://example.com/1',
],
],
],
Expand All @@ -70,7 +71,11 @@ public function testReturnsValidResponse(): void
'title' => 'Upcoming 2',
'description' => 'Desc 2',
'dateTime' => '2025-03-20T18:30:00+01:00',
'venues' => [
'venue' => [
'name' => null,
],
'displayPhoto' => [
'standardUrl' => 'https://example.com/2',
],
],
],
Expand All @@ -84,7 +89,11 @@ public function testReturnsValidResponse(): void
'title' => 'Past 1',
'description' => 'Desc 3',
'dateTime' => '2019-04-08T18:30:00+01:00',
'venues' => [
'venue' => [
'name' => null,
],
'displayPhoto' => [
'standardUrl' => 'https://example.com/3',
],
],
],
Expand All @@ -94,10 +103,11 @@ public function testReturnsValidResponse(): void
'title' => 'Past 2',
'description' => 'Desc 4',
'dateTime' => '2020-10-17T18:30:00+01:00',
'venues' => [
[
'name' => 'Lieu 2',
],
'venue' => [
'name' => 'Lieu 2',
],
'displayPhoto' => [
'standardUrl' => 'https://example.com/4',
],
],
],
Expand All @@ -121,27 +131,31 @@ public function testReturnsValidResponse(): void
self::assertEquals(new \DateTime('2025-02-11T18:30:00+01:00'), $antennes[0]->getDate());
self::assertEquals('lyon', $antennes[0]->getAntenneName());
self::assertEquals('Lieu 1', $antennes[0]->getLocation());
self::assertEquals('https://example.com/1', $antennes[0]->getPhotoUrl());

self::assertEquals(34, $antennes[1]->getId());
self::assertEquals('Upcoming 2', $antennes[1]->getTitle());
self::assertEquals('Desc 2', $antennes[1]->getDescription());
self::assertEquals(new \DateTime('2025-03-20T18:30:00+01:00'), $antennes[1]->getDate());
self::assertEquals('lyon', $antennes[1]->getAntenneName());
self::assertNull($antennes[1]->getLocation());
self::assertEquals('https://example.com/2', $antennes[1]->getPhotoUrl());

self::assertEquals(56, $antennes[2]->getId());
self::assertEquals('Past 1', $antennes[2]->getTitle());
self::assertEquals('Desc 3', $antennes[2]->getDescription());
self::assertEquals(new \DateTime('2019-04-08T18:30:00+01:00'), $antennes[2]->getDate());
self::assertEquals('lyon', $antennes[2]->getAntenneName());
self::assertNull($antennes[2]->getLocation());
self::assertEquals('https://example.com/3', $antennes[2]->getPhotoUrl());

self::assertEquals(78, $antennes[3]->getId());
self::assertEquals('Past 2', $antennes[3]->getTitle());
self::assertEquals('Desc 4', $antennes[3]->getDescription());
self::assertEquals(new \DateTime('2020-10-17T18:30:00+01:00'), $antennes[3]->getDate());
self::assertEquals('lyon', $antennes[3]->getAntenneName());
self::assertEquals('Lieu 2', $antennes[3]->getLocation());
self::assertEquals('https://example.com/4', $antennes[3]->getPhotoUrl());
}

private function makeGuzzleMockClient(ResponseInterface $response): HttpClientInterface
Expand Down
Loading