Automated Action 53d9909fb6 Create gamified kids learning API with FastAPI and SQLite
- 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
2025-06-17 18:25:16 +00:00

82 lines
1.7 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from app.models.progress import ProgressStatus
# UserProgress schemas
class UserProgressBase(BaseModel):
user_id: int
lesson_id: int
status: ProgressStatus = ProgressStatus.NOT_STARTED
progress_percentage: float = 0.0
points_earned: int = 0
class UserProgressCreate(UserProgressBase):
pass
class UserProgressUpdate(UserProgressBase):
user_id: Optional[int] = None
lesson_id: Optional[int] = None
status: Optional[ProgressStatus] = None
progress_percentage: Optional[float] = None
points_earned: Optional[int] = None
completed_at: Optional[datetime] = None
class UserProgressInDBBase(UserProgressBase):
id: int
completed_at: Optional[datetime] = None
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class UserProgress(UserProgressInDBBase):
pass
# UserAnswer schemas
class UserAnswerBase(BaseModel):
user_id: int
question_id: int
answer_id: int
is_correct: bool = False
points_earned: int = 0
attempt_number: int = 1
time_taken_seconds: Optional[int] = None
class UserAnswerCreate(UserAnswerBase):
pass
class UserAnswerUpdate(UserAnswerBase):
user_id: Optional[int] = None
question_id: Optional[int] = None
answer_id: Optional[int] = None
is_correct: Optional[bool] = None
points_earned: Optional[int] = None
attempt_number: Optional[int] = None
time_taken_seconds: Optional[int] = None
class UserAnswerInDBBase(UserAnswerBase):
id: int
created_at: datetime
class Config:
from_attributes = True
class UserAnswer(UserAnswerInDBBase):
pass