61 lines
1.9 KiB
Python
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]
|