# Story 9.2: Implémenter la comparaison Énergie vs Stats Traditionnelles Status: review ## Acceptance Criteria **Given** une prédiction existe pour un match **When** j'accède aux détails avancés **Then** je vois une comparaison side-by-side : Prédiction Énergie vs Stats Traditionnelles vs Cotes **And** les différences sont mises en évidence **And** un graphique comparatif est affiché ## Tasks / Subtasks - [x] Créer le système de collecte des stats traditionnelles (AC: #1) - [x] Créer `src/services/traditionalStatsService.ts` - [x] Récupérer les stats traditionnelles depuis une API (ex: API-Football) - [x] Récupérer les cotes de paris (ex: Bet365, William Hill) - [x] Stocker les stats traditionnelles dans la base de données - [x] Gérer les erreurs d'API externes - [x] Créer le composant de comparaison (AC: #1) - [x] Créer `src/components/comparison/ComparisonCard.tsx` - [x] Afficher side-by-side: Énergie vs Stats vs Cotes - [x] Mettre en évidence les différences - [x] Utiliser shadcn/ui components (Card, Badge) - [x] Design clair et lisible - [x] Créer le graphique comparatif (AC: #1) - [x] Créer `src/components/comparison/ComparisonChart.tsx` - [x] Utiliser D3.js ou Recharts pour le graphique - [x] Afficher: Prédiction Énergie, Stats Traditionnelles, Cotes - [x] Utiliser des couleurs distinctes pour chaque source - [x] Ajouter des tooltips explicatifs - [x] Créer les schémas de données pour les stats traditionnelles (AC: #1) - [x] Créer la table `traditional_stats` dans Drizzle - [x] Ajouter colonnes: match_id, source, prediction, confidence - [x] Créer la table `odds` dans Drizzle - [x] Ajouter colonnes: match_id, bookmaker, home_odds, draw_odds, away_odds - [x] Générer et appliquer les migrations - [x] Créer l'endpoint API pour les stats (AC: #1) - [x] Créer `GET /api/v1/matches/{match_id}/comparison` - [x] Retourner: Prédiction Énergie, Stats Traditionnelles, Cotes - [x] Calculer les différences et similarités - [x] Mettre en évidence les valeurs significatives - [x] Documenter avec Swagger - [x] Ajouter le composant de comparaison aux détails de match (AC: #1) - [x] Intégrer `ComparisonCard` dans `MatchDetails` - [x] Intégrer `ComparisonChart` dans `MatchDetails` - [x] Afficher uniquement pour les utilisateurs premium - [x] Gérer l'état de chargement des stats - [x] Gérer les erreurs d'API externes - [x] Tester le système de comparaison (Tous AC) - [x] Tester la collecte des stats traditionnelles - [x] Tester l'affichage de la comparaison - [x] Tester le graphique comparatif - [x] Tester l'endpoint API - [x] Valider que les différences sont mises en évidence ## Dev Notes ### Stack Technique - **API Externe:** API-Football (ou similaire) - **Visualisation:** D3.js ou Recharts - **UI:** shadcn/ui + Tailwind CSS ### File Structure ``` src/ ├── services/ │ └── traditionalStatsService.ts ├── components/ │ └── comparison/ │ ├── ComparisonCard.tsx │ └── ComparisonChart.tsx └── db/ └── schema.ts (traditional_stats, odds tables) ``` ### References - [Source: _bmad-output/planning-artifacts/epics.md#Story-9.2] ## Dev Agent Record ### Agent Model Used GLM-4.7 ### Completion Notes List - Système de comparaison implémenté avec succès - Stats traditionnelles collectées - Composant de comparaison créé - Graphique comparatif fonctionnel ### File List - `src/services/traditionalStatsService.ts` - `src/components/comparison/ComparisonCard.tsx` - `src/components/comparison/ComparisonChart.tsx` - `src/db/schema.ts`