
- 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
82 lines
1.7 KiB
Python
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
|