chartbastan/_bmad-output/implementation-artifacts/3-1-créer-le-modèle-de-données-pour-matchs-et-prédictions.md
2026-02-01 09:31:38 +01:00

123 lines
4.8 KiB
Markdown

# 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.