2026-02-01 09:31:38 +01:00

61 lines
1.9 KiB
Python

"""
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]