from __future__ import annotations from datetime import datetime from typing import Optional from pydantic import BaseModel from app.models.achievement import AchievementType # Achievement schemas class AchievementBase(BaseModel): name: str description: str type: AchievementType image_url: Optional[str] = None points: int = 0 criteria: str # JSON string with criteria for earning is_active: bool = True class AchievementCreate(AchievementBase): pass class AchievementUpdate(AchievementBase): name: Optional[str] = None description: Optional[str] = None type: Optional[AchievementType] = None criteria: Optional[str] = None class AchievementInDBBase(AchievementBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Achievement(AchievementInDBBase): pass # UserAchievement schemas class UserAchievementBase(BaseModel): user_id: int achievement_id: int class UserAchievementCreate(UserAchievementBase): pass class UserAchievementInDBBase(UserAchievementBase): id: int earned_at: datetime class Config: from_attributes = True class UserAchievement(UserAchievementInDBBase): achievement: Achievement class Config: from_attributes = True