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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user