42 lines
1.9 KiB
Python
Executable File
42 lines
1.9 KiB
Python
Executable File
import datetime
|
|
from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime
|
|
from app.database import Base
|
|
|
|
class Question(Base):
|
|
__tablename__ = "questions"
|
|
|
|
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
|
|
category = Column(String(50), default="harry_potter", index=True)
|
|
question = Column(Text, nullable=False)
|
|
canonical_answer = Column(String(255), nullable=False)
|
|
accepted_answers = Column(Text, nullable=True) # JSON or comma-delimited
|
|
question_type = Column(String(20), default="text") # 'text' or 'multiple_choice'
|
|
options = Column(Text, nullable=True) # JSON list of options for multiple choice
|
|
hint = Column(Text, nullable=True)
|
|
status = Column(String(30), default="active", index=True) # active, needs_review, rejected, archived
|
|
submitted_by = Column(String(100), nullable=True)
|
|
sort_order = Column(Integer, default=0)
|
|
created_at = Column(DateTime, default=datetime.datetime.utcnow)
|
|
reviewed_at = Column(DateTime, nullable=True)
|
|
reviewed_by = Column(String(50), nullable=True)
|
|
|
|
class QuizSession(Base):
|
|
__tablename__ = "quiz_sessions"
|
|
|
|
id = Column(String(36), primary_key=True, index=True)
|
|
score = Column(Integer, default=0)
|
|
current_question_idx = Column(Integer, default=0)
|
|
question_ids = Column(Text, nullable=False) # JSON array string: "[1, 2, 3...]"
|
|
attempts_current = Column(Integer, default=0)
|
|
is_finished = Column(Boolean, default=False)
|
|
created_at = Column(DateTime, default=datetime.datetime.utcnow)
|
|
finished_at = Column(DateTime, nullable=True)
|
|
|
|
class AdminUser(Base):
|
|
__tablename__ = "admin_users"
|
|
|
|
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
|
|
username = Column(String(50), unique=True, index=True, nullable=False)
|
|
password_hash = Column(String(255), nullable=False)
|
|
created_at = Column(DateTime, default=datetime.datetime.utcnow)
|