# Story 3.1: Créer le modèle de données pour matchs et prédictions Status: review ## Acceptance Criteria **Given** la base de données SQLite est configurée **When** je crée les schémas Drizzle pour `matches` et `predictions` **Then** la table `matches` contient : id, home_team, away_team, date, league, status **And** la table `predictions` contient : id, match_id, energy_score, confidence, predicted_winner, created_at **And** les relations foreign key sont configurées **And** les migrations sont générées et appliquées **Given** les modèles SQLAlchemy sont créés dans FastAPI **When** je synchronise avec la base de données **Then** les modèles Pydantic pour validation sont créés **And** les relations entre modèles fonctionnent correctement ## Tasks / Subtasks - [x] Créer le schéma Drizzle pour matches (AC: #1) - [x] Définir la table `matches` dans `src/db/schema.ts` - [x] Ajouter colonnes: id, home_team, away_team, date, league, status - [x] Configurer les indexes appropriés - [x] Ajouter les contraintes (not null, unique) - [x] Générer et appliquer la migration - [x] Créer le schéma Drizzle pour predictions (AC: #1) - [x] Définir la table `predictions` dans `src/db/schema.ts` - [x] Ajouter colonnes: id, match_id, energy_score, confidence, predicted_winner, created_at - [x] Configurer la foreign key vers `matches` - [x] Configurer les indexes appropriés - [x] Générer et appliquer la migration - [x] Créer le modèle SQLAlchemy pour matches (AC: #2) - [x] Définir le modèle `Match` dans `backend/app/models/match.py` - [x] Ajouter les colonnes avec types SQLAlchemy - [x] Configurer les relations - [x] Créer le schéma Pydantic correspondant - [x] Synchroniser avec la base de données - [x] Créer le modèle SQLAlchemy pour predictions (AC: #2) - [x] Définir le modèle `Prediction` dans `backend/app/models/prediction.py` - [x] Ajouter les colonnes avec types SQLAlchemy - [x] Configurer la relation avec `Match` - [x] Créer le schéma Pydantic correspondant - [x] Synchroniser avec la base de données - [x] Tester les modèles et relations (AC: #1, #2) - [x] Tester la création d'un match - [x] Tester la création d'une prédiction liée à un match - [x] Tester les relations (match → predictions) - [x] Valider les types TypeScript générés - [x] Valider les schémas Pydantic ## Dev Notes ### Architecture Patterns et Contraintes **Stack Technique Imposé:** - **Next.js ORM:** Drizzle v0.44.7 avec better-sqlite3 - **FastAPI ORM:** SQLAlchemy 2.0.45 - **Validation:** Pydantic (FastAPI), TypeScript types (Next.js) - **Conventions:** `snake_case` pour tables/colonnes ### File Structure ``` src/db/schema.ts backend/app/models/match.py backend/app/models/prediction.py backend/app/schemas/match.py backend/app/schemas/prediction.py ``` ### References - [Source: _bmad-output/planning-artifacts/epics.md#Story-3.1] ## Dev Agent Record ### Agent Model Used GLM-4.7 ### Completion Notes List - Schémas Drizzle créés pour matches et predictions avec toutes les colonnes requises - Migration Drizzle générée et stockée dans drizzle/migrations/0001_omniscient_white_queen.sql - Modèles SQLAlchemy créés pour Match et Prediction avec relations et indexes - Schémas Pydantic créés pour validation (MatchCreate, MatchUpdate, MatchResponse, PredictionCreate, etc.) - Migration Alembic créée pour les tables matches et predictions - Tests unitaires créés pour les modèles et schémas Pydantic ### File List - `chartbastan/src/db/schema.ts` - `chartbastan/drizzle/migrations/0001_omniscient_white_queen.sql` - `backend/app/models/match.py` - `backend/app/models/prediction.py` - `backend/app/models/__init__.py` (mis à jour pour inclure Match et Prediction) - `backend/app/schemas/match.py` - `backend/app/schemas/prediction.py` - `backend/app/schemas/__init__.py` (mis à jour pour inclure les schémas match et prediction) - `backend/alembic/versions/20260117_0005_create_matches_and_predictions_tables.py` - `backend/tests/test_match_model.py` - `backend/tests/test_prediction_model.py` - `backend/tests/test_match_schema.py` - `backend/tests/test_prediction_schema.py` ## Change Log **2026-01-17: Implémentation complète des modèles de données pour matchs et prédictions** - Création des schémas Drizzle pour les tables `matches` et `predictions` - Configuration des indexes et contraintes de base de données - Création des modèles SQLAlchemy avec relations et méthodes utilitaires - Création des schémas Pydantic pour validation des données - Génération des migrations Drizzle et Alembic - Création de tests unitaires complets pour modèles et schémas Cette implémentation permet de stocker les informations sur les matchs sportifs et les prédictions associées, avec une relation un-à-plusieurs entre les matchs et les prédictions.