""" Schémas Pydantic pour les badges """ from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any from datetime import datetime class BadgeBase(BaseModel): """Schéma de base pour un badge""" name: str = Field(..., description="Nom du badge") description: str = Field(..., description="Description du badge") icon: str = Field(..., description="Icône ou emoji du badge") category: str = Field(..., description="Catégorie du badge (predictions, accuracy, engagement, social)") criteriaType: str = Field(..., description="Type de critère") criteriaValue: int = Field(..., description="Valeur du critère") criteriaDescription: str = Field(..., description="Description du critère") rarity: str = Field(..., description="Rareté du badge (common, rare, epic, legendary)") points: int = Field(..., description="Points attribués pour le badge") class BadgeResponse(BadgeBase): """Réponse avec un badge""" id: int badgeId: str createdAt: str unlocked: Optional[bool] = None # Indique si le badge est débloqué par l'utilisateur class BadgeListResponse(BaseModel): """Réponse avec une liste de badges""" data: List[BadgeResponse] meta: Dict[str, Any] class UserBadgeResponse(BaseModel): """Réponse avec un badge d'utilisateur""" id: int userId: int badgeId: int unlockedAt: str badge: Dict[str, Any] class UserBadgeListResponse(BaseModel): """Réponse avec une liste de badges d'utilisateur""" data: Dict[str, Any] meta: Dict[str, Any] class BadgeUnlockRequest(BaseModel): """Requête pour débloquer un badge""" userId: int = Field(..., description="ID de l'utilisateur") badgeId: str = Field(..., description="ID du badge à débloquer") class BadgeCheckResponse(BaseModel): """Réponse après vérification des badges""" data: Dict[str, Any] meta: Dict[str, Any]