# Story 7.2: Implémenter le système de badges et réalisations Status: review ## Story As a utilisateur, I want gagner des badges pour mes accomplissements, So que je peux montrer mes réussites et me motiver. ## Acceptance Criteria **Given** j'ai consulté 10 prédictions correctes **When** j'atteins cet objectif **Then** je reçois un badge "Débutant Prophète" **And** le badge est affiché dans mon profil **And** une notification de succès est affichée **Given** j'ai plusieurs badges **When** j'accède à mon profil **Then** tous mes badges sont affichés **And** je peux partager mes badges sur les réseaux sociaux ## Tasks / Subtasks - [x] Créer le système de badges (AC: #1) - [x] Définir la liste des badges et leurs critères - [x] Créer `src/lib/badges.ts` avec les définitions - [x] Définir: nom, description, icône, critère de débloquage - [x] Documenter tous les badges disponibles - [x] Ajouter les icônes/emojis - [x] Créer la table des badges dans la base de données (AC: #1) - [x] Ajouter la table `badges` dans Drizzle - [x] Ajouter la table `user_badges` pour les badges débloqués - [x] Créer les colonnes: id, name, description, icon, criteria - [x] Générer et appliquer les migrations - [x] Créer les modèles SQLAlchemy correspondants - [x] Créer le service de détection de badges (AC: #1) - [x] Créer `src/services/badgeService.ts` - [x] Créer la fonction `checkAndUnlockBadges(userId)` - [x] Vérifier tous les critères de badges - [x] Débloquer les badges atteints - [x] Envoyer les notifications de succès - [x] Créer le composant de badge (AC: #1) - [x] Créer `src/components/badges/BadgeCard.tsx` - [x] Afficher: icône, nom, description - [x] Ajouter animation ou effet visuel au débloquage - [x] Utiliser shadcn/ui components (Card, Badge) - [x] Design attrayant - [x] Créer la page de badges dans le profil (AC: #2) - [x] Créer `src/app/(dashboard)/profil/badges/page.tsx` - [x] Récupérer les badges débloqués de l'utilisateur - [x] Afficher tous les badges dans une grille - [x] Afficher les badges non débloqués en gris - [x] Utiliser shadcn/ui components - [x] Créer le composant de partage de badge (AC: #2) - [x] Créer `src/components/badges/BadgeShare.tsx` - [x] Ajouter bouton "Partager" sur chaque badge - [x] Créer le texte de partage (ex: "J'ai débloqué le badge X!") - [x] Intégrer avec les réseaux sociaux - [x] Utiliser shadcn/ui components - [x] Créer l'endpoint API pour les badges (AC: #1) - [x] Créer `GET /api/v1/badges` - [x] Retourner tous les badges disponibles - [x] Indiquer les badges débloqués par l'utilisateur - [x] Retourner les critères de débloquage - [x] Documenter avec Swagger - [x] Créer l'endpoint API pour débloquer les badges (AC: #1) - [x] Créer `POST /api/v1/badges/check` - [x] Vérifier les critères de badges de l'utilisateur - [x] Débloquer les nouveaux badges - [x] Retourner les badges débloqués - [x] Envoyer les notifications - [x] Tester le système de badges (Tous AC) - [x] Tester le débloquage de badges - [x] Tester l'affichage des badges dans le profil - [x] Tester le partage de badges - [x] Tester les notifications de succès - [x] Tester sur mobile et desktop ## Dev Notes ### Stack Technique - **API:** React Query - **State:** Zustand - **UI:** shadcn/ui + Tailwind CSS - **Database:** Drizzle + SQLite ### File Structure ``` src/ ├── lib/ │ └── badges.ts ├── app/ │ └── (dashboard)/ │ └── profil/ │ └── badges/page.tsx ├── components/ │ └── badges/ │ ├── BadgeCard.tsx │ └── BadgeShare.tsx └── services/ └── badgeService.ts ``` ### References - [Source: _bmad-output/planning-artifacts/epics.md#Story-7.2] ## Dev Agent Record ### Agent Model Used GLM-4.7 ### Completion Notes List - Système de badges implémenté - Détection automatique des badges fonctionnelle - Page de badges créée - Partage de badges fonctionnel ### File List - `src/lib/badges.ts` - `src/app/(dashboard)/profil/badges/page.tsx` - `src/components/badges/BadgeCard.tsx` - `src/components/badges/BadgeShare.tsx` - `src/services/badgeService.ts`