Add dynamic events to sitemap (online + not secret), update TASK_CHECKUP

- Sitemap: list all online non-secret events with images
- Fix event/orga page counts in sitemap index
- TASK_CHECKUP: mark sitemap done, remove health check, captcha, E2E tests,
  simplify crons to backups only

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-22 19:51:34 +01:00
parent 8e0177463b
commit b7b56ed35a
2 changed files with 39 additions and 11 deletions

View File

@@ -35,7 +35,7 @@
- [ ] Ajouter le filtrage par date/ville sur /evenements
- [ ] Responsive : vérifier toutes les pages sur mobile 320px
- [ ] Ajouter les métadonnées OpenGraph sur toutes les pages publiques
- [ ] Ajouter le sitemap dynamique avec les événements en ligne
- [x] Ajouter le sitemap dynamique avec les événements en ligne
### API (Application mobile scanner uniquement)
- [ ] POST `/api/login` : authentification email + password orga, retourne un JWT token
@@ -52,11 +52,8 @@
### Tests
- [ ] Atteindre 90%+ de couverture PHP
- [ ] Atteindre 100% de couverture JS
- [ ] Ajouter des tests E2E (Panther ou Playwright) pour le flow d'achat complet
- [ ] Ajouter des tests pour le flow d'inscription via invitation
### Infrastructure
- [ ] Configurer les crons Symfony (expiration commandes, expiration billets)
- [ ] Configurer les crons pour les backups automatiques de la base de données
- [ ] Ajouter le monitoring des queues Messenger (failed messages)
- [ ] Configurer les backups automatiques de la base de données
- [ ] Ajouter le health check endpoint pour le monitoring

View File

@@ -2,6 +2,7 @@
namespace App\Controller;
use App\Entity\Event;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -24,13 +25,16 @@ class SitemapController extends AbstractController
#[Route('/sitemap.xml', name: 'app_sitemap', methods: ['GET'])]
public function index(): Response
{
$eventPages = max(1, (int) ceil(0 / self::MAX_URLS_PER_SITEMAP));
$eventCount = $this->em->getRepository(Event::class)->count(['isOnline' => true, 'isSecret' => false]);
$eventPages = max(1, (int) ceil($eventCount / self::MAX_URLS_PER_SITEMAP));
$sitemaps = [
['loc' => $this->generateUrl('app_sitemap_main', [], UrlGeneratorInterface::ABSOLUTE_URL)],
];
$orgaPages = max(1, (int) ceil(0 / self::MAX_URLS_PER_SITEMAP));
$allUsers = $this->em->getRepository(User::class)->findAll();
$orgaCount = \count(array_filter($allUsers, fn (User $u) => \in_array('ROLE_ORGANIZER', $u->getRoles(), true) && $u->isApproved()));
$orgaPages = max(1, (int) ceil($orgaCount / self::MAX_URLS_PER_SITEMAP));
for ($i = 1; $i <= $eventPages; ++$i) {
$sitemaps[] = [
@@ -86,9 +90,11 @@ class SitemapController extends AbstractController
}
#[Route('/sitemap-events-{page}.xml', name: 'app_sitemap_events', requirements: ['page' => '\d+'], methods: ['GET'])]
public function events(int $page = 1): Response
public function events(Request $request, int $page = 1): Response
{
return $this->renderUrlset($this->getEventUrls());
$baseUrl = $request->getSchemeAndHttpHost();
return $this->renderUrlset($this->getEventUrls($baseUrl));
}
#[Route('/sitemap-orgas-{page}.xml', name: 'app_sitemap_orgas', requirements: ['page' => '\d+'], methods: ['GET'])]
@@ -114,9 +120,34 @@ class SitemapController extends AbstractController
/**
* @return list<array<string, mixed>>
*/
private function getEventUrls(): array
private function getEventUrls(string $baseUrl): array
{
return [];
$events = $this->em->getRepository(Event::class)->findBy(['isOnline' => true, 'isSecret' => false]);
$urls = [];
foreach ($events as $event) {
$organizer = $event->getAccount();
$url = [
'loc' => $this->generateUrl('app_event_detail', [
'orgaSlug' => $organizer->getSlug(),
'id' => $event->getId(),
'eventSlug' => $event->getSlug(),
], UrlGeneratorInterface::ABSOLUTE_URL),
'changefreq' => 'daily',
'priority' => '0.8',
];
if ($event->getEventMainPictureName()) {
$url['images'] = [[
'loc' => $baseUrl.'/uploads/events/'.$event->getEventMainPictureName(),
'title' => $event->getTitle(),
]];
}
$urls[] = $url;
}
return $urls;
}
/**