Skip to content

🤖 Analyse hebdomadaire IA (2026-08-06) - #24

Closed
Estemobs wants to merge 1 commit into
mainfrom
ai/hebdo-2026-08-06
Closed

Estemobs wants to merge 1 commit into
mainfrom
ai/hebdo-2026-08-06

Conversation

@Estemobs

@Estemobs Estemobs commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Résumé

TVTracker est une application de suivi de séries, animes et films, auto-hébergée, avec un backend Node.js/Express et un frontend React (Vite). Le projet est bien structuré, avec des services dédiés pour les sources externes (TVmaze, Wikipedia, Wikidata, iTunes, JustWatch, Allociné, TMDB) et une intégration Discord. La CI/CD est en place (GitHub Actions, Docker, Renovate). Le code est globalement propre, avec des commentaires explicatifs et une attention à la robustesse (retries HTTP, déduplication). Cependant, plusieurs points méritent attention : duplication de logique entre backend et frontend, absence de tests (un seul fichier de test), et quelques risques de sécurité/performance.

Problèmes et bugs potentiels

  • Duplication de la logique de rendu des messages Discord : frontend/src/pages/Profile/Profile.jsx contient previewDiscordMessage() et splitDiscordMention() qui dupliquent la logique de renderMessageTemplate() et buildPayload() de backend/src/services/discordNotifications.js. Toute modification de l’un sans l’autre entraĂ®nera des incohĂ©rences.
  • Gestion des erreurs des API externes : bien que backend/src/services/httpRetry.js existe, il faut vĂ©rifier que tous les appels (Wikipedia, TVmaze, etc.) utilisent bien ce mĂ©canisme avec des timeouts adaptĂ©s. Un service externe lent peut bloquer la rĂ©ponse API.
  • Validation des entrĂ©es utilisateur : l’import TV Time (backend/src/services/tvtimeImport.js) et les templates Discord (champ libre) ne semblent pas avoir de validation stricte cĂ´tĂ© backend. Un fichier malformĂ© ou un template avec des caractères dangereux pourrait causer des erreurs ou des failles (ex: injection de mentions Discord).
  • SĂ©curitĂ© JWT : le secret est requis, mais il faut s’assurer que les tokens ont une expiration courte et que le secret est suffisamment fort. VĂ©rifier la configuration dans backend/src/utils/jwt.js.
  • Performance : les appels aux API externes ne sont pas mis en cache (sauf pour les personnes via la migration 009_add_people_cache.sql). Les recherches rĂ©pĂ©tĂ©es peuvent ĂŞtre lentes et coĂ»teuses.
  • AccessibilitĂ© : le hook useWheelToHorizontalScroll dans frontend/src/pages/Explore/Explore.jsx intercepte la molette de la souris sur les lignes horizontales, ce qui peut empĂŞcher le scroll vertical de la page si l’utilisateur survole une ligne. Il faudrait limiter ce comportement (ex: ne l’activer que si la ligne est scrollable).
  • Fichiers trop volumineux : frontend/src/pages/Profile/Profile.jsx (20 Ko) et backend/src/routes/explore.js (19 Ko) sont trop longs, ce qui rend la maintenance difficile.

Qualité du code et nettoyage

  • Duplication de code : comme mentionnĂ©, la logique des messages Discord est dupliquĂ©e. Il serait prĂ©fĂ©rable de crĂ©er un module partagĂ© (ex: shared/ ou un package interne) pour Ă©viter les divergences.
  • Commentaires : les commentaires sont souvent utiles et expliquent le « pourquoi » (ex: dans wikipedia.js), ce qui est apprĂ©ciable. Cependant, certains sont trop longs et pourraient ĂŞtre raccourcis.
  • Pas de typage : le projet utilise JavaScript sans TypeScript. Pour un projet de cette taille, l’ajout de TypeScript pourrait rĂ©duire les erreurs, mais ce n’est pas une prioritĂ© immĂ©diate.
  • DĂ©coupage des composants : Profile.jsx et Explore.jsx pourraient ĂŞtre dĂ©coupĂ©s en composants plus petits (ex: StatCard, Poster sont dĂ©jĂ  extraits, mais d’autres parties pourraient l’être).
  • Gestion des erreurs : le service debugLog.js est une bonne pratique, mais il faudrait s’assurer que les erreurs sont bien journalisĂ©es avec le contexte (route, paramètres) pour faciliter le dĂ©bogage.

Nouvelles fonctionnalités à envisager

  • Documentation API : ajouter une spĂ©cification OpenAPI (Swagger) pour faciliter l’intĂ©gration et la maintenance.
  • Recherche avancĂ©e : permettre des filtres par genre, annĂ©e, plateforme, etc. dans l’explorateur.
  • Synchronisation avec Trakt : en plus de l’import TV Time, proposer une synchronisation avec Trakt pour les utilisateurs qui l’utilisent.
  • Notifications par e-mail : en plus de Discord, offrir des notifications par e-mail (via SMTP) pour les nouveaux Ă©pisodes.
  • Statistiques globales : ajouter une page d’administration avec des statistiques d’utilisation (nombre d’utilisateurs, contenus suivis, etc.).
  • Mode hors-ligne : permettre de marquer des Ă©pisodes comme vus sans connexion (PWA).

Tests manquants

  • Backend : il n’y a qu’un seul test (backend/tests/httpRetry.test.js). Il manque des tests unitaires pour les services (wikipedia.js, wikidata.js, tmdb.js, justwatch.js, tvtimeImport.js, etc.) et des tests d’intĂ©gration pour les routes (shows.js, movies.js, profile.js, admin.js, explore.js).
  • Frontend : aucun test n’est prĂ©sent. Il faudrait au moins des tests de composants (React Testing Library) pour les composants clĂ©s (PosterCard, NavBar, Profile, Explore, etc.).
  • Tests E2E : aucun test de bout en bout (Playwright ou Cypress) pour valider les parcours utilisateur (inscription, ajout de sĂ©rie, import TV Time, etc.).

Dépendances et sécurité

  • VulnĂ©rabilitĂ©s : il est recommandĂ© de lancer npm audit dans backend/ et frontend/ pour dĂ©tecter les vulnĂ©rabilitĂ©s. La mise Ă  jour de adm-zip vers ^0.6.0 (commit 5cc9bcd) est probablement une correction de sĂ©curitĂ©, mais il faut vĂ©rifier que toutes les dĂ©pendances sont Ă  jour.
  • JWT_SECRET : le secret est passĂ© en variable d’environnement, mais il faut s’assurer qu’il est gĂ©nĂ©rĂ© avec une longueur suffisante (ex: openssl rand -hex 32) et que les tokens ont une expiration courte (ex: 24h).
  • Validation des entrĂ©es : l’import TV Time et les templates Discord doivent ĂŞtre validĂ©s cĂ´tĂ© backend pour Ă©viter les injections (ex: mentions Discord, HTML).
  • HTTPS : si l’application est exposĂ©e sur Internet, il est recommandĂ© de mettre en place un reverse proxy avec HTTPS (ex: Caddy, Nginx) pour protĂ©ger les donnĂ©es en transit.

Suggestions prioritaires (top 5)

  1. Ajouter des tests : commencer par des tests unitaires pour les services backend (surtout wikipedia.js, wikidata.js, tvtimeImport.js) et des tests d’intégration pour les routes principales (shows, movies, profile). Cela permettra de détecter les régressions lors des mises à jour.
  2. Éliminer la duplication de code Discord : créer un module partagé (ex: shared/discord.js) utilisé à la fois par le backend et le frontend pour le rendu des messages, afin d’éviter les divergences.
  3. Ajouter un cache pour les appels API externes : utiliser un cache en mémoire (ex: node-cache) ou la table people_cache existante pour les recherches fréquentes (films, séries) afin d’améliorer les performances.
  4. Renforcer la validation des entrées : valider les fichiers importés (TV Time) et les templates Discord côté backend (taille, format, caractères autorisés) pour éviter les erreurs et les failles de sécurité.
  5. Améliorer la gestion des erreurs : ajouter un middleware de gestion d’erreurs global dans le backend pour renvoyer des réponses JSON cohérentes et journaliser les erreurs avec le contexte (route, utilisateur, stack).

@Estemobs Estemobs closed this Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant