Files
problem-bank/backend/schemas.py

118 lines
2.4 KiB
Python
Raw Normal View History

2026-03-05 11:50:15 +08:00
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
class LoginRequest(BaseModel):
username: str
password: str
class QuestionBase(BaseModel):
chapter: str = ""
primary_knowledge: str = ""
secondary_knowledge: str = ""
question_type: str = ""
difficulty: str = ""
stem: str = Field(..., min_length=1)
option_a: str = ""
option_b: str = ""
option_c: str = ""
option_d: str = ""
answer: str = ""
explanation: str = ""
notes: str = ""
source_file: str = ""
class QuestionCreate(QuestionBase):
pass
class QuestionUpdate(BaseModel):
chapter: Optional[str] = None
primary_knowledge: Optional[str] = None
secondary_knowledge: Optional[str] = None
question_type: Optional[str] = None
difficulty: Optional[str] = None
stem: Optional[str] = None
option_a: Optional[str] = None
option_b: Optional[str] = None
option_c: Optional[str] = None
option_d: Optional[str] = None
answer: Optional[str] = None
explanation: Optional[str] = None
notes: Optional[str] = None
source_file: Optional[str] = None
class QuestionOut(QuestionBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class BatchDeleteRequest(BaseModel):
ids: list[int]
class BatchUpdateRequest(BaseModel):
ids: list[int]
chapter: Optional[str] = None
primary_knowledge: Optional[str] = None
secondary_knowledge: Optional[str] = None
question_type: Optional[str] = None
difficulty: Optional[str] = None
class CategoryBase(BaseModel):
name: str
parent_id: Optional[int] = None
level: int = 1
class CategoryCreate(CategoryBase):
pass
class CategoryOut(CategoryBase):
id: int
class Config:
from_attributes = True
class ImportHistoryOut(BaseModel):
id: int
filename: str
method: str
question_count: int
status: str
created_at: datetime
class Config:
from_attributes = True
class PracticeStartRequest(BaseModel):
chapter: Optional[str] = None
secondary_knowledge: Optional[str] = None
question_type: Optional[str] = None
difficulty: Optional[str] = None
random_mode: bool = False
limit: int = 20
class PracticeCheckRequest(BaseModel):
question_id: int
user_answer: str