# Story 6.3: Implémenter l'historique personnel avec ROI

Status: review

## Story

As a utilisateur,
I want voir mon historique de prédictions consultées avec mon ROI,
So que je peux suivre ma performance personnelle.

## Acceptance Criteria

**Given** j'ai consulté plusieurs prédictions
**When** j'accède à la section Historique
**Then** je vois la liste de mes prédictions consultées
**And** chaque prédiction montre : match, date consultée, confidence, résultat (si connu)
**And** mon ROI personnel est calculé et affiché (ex: "+240€ depuis inscription")

**Given** une prédiction que j'ai consultée est confirmée
**When** le résultat du match est connu
**Then** la prédiction est marquée comme correcte ou incorrecte
**And** mon taux de précision personnel est mis à jour
**And** un badge de succès est affiché si la prédiction était correcte

## Tasks / Subtasks

- [x] Créer la page d'historique (AC: #1)
  - [x] Créer `src/app/(dashboard)/historique/page.tsx`
  - [x] Récupérer l'historique des prédictions consultées depuis l'API
  - [x] Créer la liste des prédictions
  - [x] Afficher chaque prédiction avec ses détails
  - [x] Utiliser shadcn/ui components (Card, Badge, Table)

- [x] Créer le composant de prédiction historique (AC: #1)
  - [x] Créer `src/components/history/PredictionHistoryItem.tsx`
  - [x] Afficher: match, date consultée, confidence, résultat
  - [x] Ajouter icône de succès si prédiction correcte
  - [x] Ajouter badge de résultat
  - [x] Utiliser Confidence Meter

- [x] Calculer et afficher le ROI (AC: #1)
  - [x] Créer `src/hooks/useROI.ts`
  - [x] Calculer le ROI depuis le premier jour
  - [x] Formater l'affichage (ex: "+240€ depuis inscription")
  - [x] Afficher le ROI en haut de la page
  - [x] Gérer les cas sans gains/pertes

- [x] Mettre à jour les résultats des prédictions (AC: #2)
  - [x] Créer `src/services/predictionService.ts`
  - [x] Créer la fonction `updatePredictionResult()`
  - [x] Marquer les prédictions comme correctes/incorrectes
  - [x] Mettre à jour le taux de précision personnel
  - [x] Appeler cette fonction quand le résultat d'un match est connu

- [x] Créer le composant de badge de succès (AC: #2)
  - [x] Créer `src/components/history/SuccessBadge.tsx`
  - [x] Afficher badge si prédiction correcte
  - [x] Ajouter animation ou effet visuel
  - [x] Utiliser shadcn/ui Badge
  - [x] Gérer l'affichage sur mobile

- [x] Créer le composant de taux de précision (AC: #2)
  - [x] Créer `src/components/history/AccuracyRate.tsx`
  - [x] Calculer le taux de précision personnel
  - [x] Afficher le pourcentage avec visuel
  - [x] Afficher le nombre total de prédictions
  - [x] Utiliser Confidence Meter ou similaire

- [x] Tester l'historique complet (Tous AC)
  - [x] Tester l'affichage de l'historique
  - [x] Tester le calcul du ROI
  - [x] Tester la mise à jour des résultats
  - [x] Tester l'affichage du taux de précision
  - [x] Tester sur mobile et desktop

## Dev Notes

### Stack Technique
- **API:** React Query pour le cache
- **State:** Zustand
- **UI:** shadcn/ui + Tailwind CSS
- **Calculs:** JavaScript/TypeScript

### File Structure
```
src/
├── app/
│   └── (dashboard)/
│       └── historique/page.tsx
├── components/
│   └── history/
│       ├── PredictionHistoryItem.tsx
│       ├── SuccessBadge.tsx
│       └── AccuracyRate.tsx
├── hooks/
│   └── useROI.ts
└── services/
    └── predictionService.ts
```

### References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-6.3]

## Dev Agent Record

### Agent Model Used
GLM-4.7

### Completion Notes List
- Historique personnel créé avec succès
- ROI calculé et affiché (modèle: correct=+100€, incorrect=-50€)
- Mise à jour des résultats fonctionnelle via API PUT endpoint
- Taux de précision personnel implémenté avec visualisation
- Composants UI créés: SuccessBadge, AccuracyRate, PredictionHistoryItem
- Hooks personnalisés créés: useROI, usePredictionHistory
- Service PredictionService pour gestion des prédictions utilisateur
- Base de données étendue avec table user_predictions
- API backend créée pour le suivi des prédictions utilisateur
- Tests unitaires complets pour tous les composants et services

### File List
#### Backend
- `backend/alembic/versions/add_user_predictions_tracking.py`
- `backend/app/models/user_prediction.py`
- `backend/app/models/__init__.py` (modifié)
- `backend/app/models/user.py` (modifié)
- `backend/app/models/prediction.py` (modifié)
- `backend/app/schemas/user_prediction.py`
- `backend/app/services/user_prediction_service.py`
- `backend/app/api/v1/user_predictions.py`
- `backend/app/api/v1/__init__.py` (modifié)

#### Frontend
- `chartbastan/src/app/(dashboard)/historique/page.tsx`
- `chartbastan/src/components/history/PredictionHistoryItem.tsx`
- `chartbastan/src/components/history/SuccessBadge.tsx`
- `chartbastan/src/components/history/AccuracyRate.tsx`
- `chartbastan/src/hooks/useROI.ts`
- `chartbastan/src/hooks/usePredictionHistory.ts`
- `chartbastan/src/services/predictionService.ts`

#### Tests
- `chartbastan/src/components/history/__tests__/SuccessBadge.test.tsx`
- `chartbastan/src/components/history/__tests__/AccuracyRate.test.tsx`
- `chartbastan/src/components/history/__tests__/PredictionHistoryItem.test.tsx`
- `chartbastan/src/hooks/__tests__/useROI.test.ts`
- `chartbastan/src/hooks/__tests__/usePredictionHistory.test.ts`
- `chartbastan/src/services/__tests__/predictionService.test.ts`
