from typing import Optional from datetime import datetime, timezone from sqlalchemy import Column, String, Text, Integer, Float, DateTime, Boolean, JSON, func from sqlalchemy.orm import Mapped, mapped_column from app.models.user import Base class Question(Base): __tablename__ = "questions" id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) question_id: Mapped[str] = mapped_column(String(64), unique=True, nullable=False, index=True) question_type: Mapped[str] = mapped_column(String(8), nullable=False) # A / B / X subject: Mapped[str] = mapped_column(String(64), nullable=False, index=True) chapter_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True) difficulty: Mapped[int] = mapped_column(default=1) # 1-5 content: Mapped[str] = mapped_column(Text, nullable=False) options: Mapped[list] = mapped_column(JSON, nullable=False) answer: Mapped[str] = mapped_column(String(16), nullable=False) explanation: Mapped[str] = mapped_column(Text, nullable=False) knowledge_point_ids: Mapped[Optional[list]] = mapped_column(JSON) source: Mapped[Optional[str]] = mapped_column(Text) frequency: Mapped[Optional[str]] = mapped_column(String(16)) audited: Mapped[bool] = mapped_column(default=False) correct_count: Mapped[int] = mapped_column(default=0) attempt_count: Mapped[int] = mapped_column(default=0) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now() )