
- Set up project structure with FastAPI and SQLite - Implement user authentication with JWT - Create models for learning content (subjects, lessons, quizzes) - Add progress tracking and gamification features - Implement comprehensive API documentation - Add error handling and validation - Set up proper logging and health check endpoint
69 lines
1.3 KiB
Python
69 lines
1.3 KiB
Python
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
|