question.py 1.5 KB

12345678910111213141516171819202122232425262728293031
  1. from typing import Optional
  2. from datetime import datetime, timezone
  3. from sqlalchemy import Column, String, Text, Integer, Float, DateTime, Boolean, JSON, func
  4. from sqlalchemy.orm import Mapped, mapped_column
  5. from app.models.user import Base
  6. class Question(Base):
  7. __tablename__ = "questions"
  8. id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
  9. question_id: Mapped[str] = mapped_column(String(64), unique=True, nullable=False, index=True)
  10. question_type: Mapped[str] = mapped_column(String(8), nullable=False) # A / B / X
  11. subject: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
  12. chapter_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
  13. difficulty: Mapped[int] = mapped_column(default=1) # 1-5
  14. content: Mapped[str] = mapped_column(Text, nullable=False)
  15. options: Mapped[list] = mapped_column(JSON, nullable=False)
  16. answer: Mapped[str] = mapped_column(String(16), nullable=False)
  17. explanation: Mapped[str] = mapped_column(Text, nullable=False)
  18. knowledge_point_ids: Mapped[Optional[list]] = mapped_column(JSON)
  19. source: Mapped[Optional[str]] = mapped_column(Text)
  20. frequency: Mapped[Optional[str]] = mapped_column(String(16))
  21. audited: Mapped[bool] = mapped_column(default=False)
  22. correct_count: Mapped[int] = mapped_column(default=0)
  23. attempt_count: Mapped[int] = mapped_column(default=0)
  24. created_at: Mapped[datetime] = mapped_column(
  25. DateTime(timezone=True), server_default=func.now()
  26. )