| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from typing import Optional
- from datetime import datetime, timezone
- from sqlalchemy import Column, String, Text, Integer, Float, DateTime, Boolean, ForeignKey, JSON, func
- from sqlalchemy.orm import Mapped, mapped_column
- from app.models.user import Base
- class UserProgress(Base):
- __tablename__ = "user_progress"
- id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
- user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False, index=True)
- subject: Mapped[Optional[str]] = mapped_column(String(64), index=True)
- chapter_id: Mapped[Optional[str]] = mapped_column(String(64), index=True)
- knowledge_point_id: Mapped[Optional[str]] = mapped_column(String(64), index=True)
- questions_answered: Mapped[int] = mapped_column(default=0)
- questions_correct: Mapped[int] = mapped_column(default=0)
- study_seconds: Mapped[int] = mapped_column(default=0)
- last_study_at: Mapped[Optional[datetime]] = mapped_column(
- DateTime(timezone=True)
- )
- created_at: Mapped[datetime] = mapped_column(
- DateTime(timezone=True), server_default=func.now()
- )
- updated_at: Mapped[datetime] = mapped_column(
- DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
- )
- class AnswerRecord(Base):
- __tablename__ = "answer_records"
- id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
- user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False, index=True)
- question_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
- user_answer: Mapped[str] = mapped_column(String(16), nullable=False)
- is_correct: Mapped[bool] = mapped_column(nullable=False)
- study_mode: Mapped[str] = mapped_column(String(32), default="practice") # practice / exam
- created_at: Mapped[datetime] = mapped_column(
- DateTime(timezone=True), server_default=func.now()
- )
|