123 lines
4.8 KiB
Markdown
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.
|