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) difficulty = Column(String(20), default="medium", index=True) # easy, medium, hard question_type = Column(String(20), default="text") # 'text' or 'multiple_choice' # German content (default) question = Column(Text, nullable=False) canonical_answer = Column(String(255), nullable=False) options = Column(Text, nullable=True) # JSON list of options for multiple choice hint = Column(Text, nullable=True) # English content question_en = Column(Text, nullable=True) answer_en = Column(String(255), nullable=True) options_en = Column(Text, nullable=True) # JSON list of options in English hint_en = Column(Text, nullable=True) accepted_answers = Column(Text, nullable=True) # JSON or comma-delimited 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) lang = Column(String(10), default="de") # 'de' or 'en' difficulty = Column(String(20), default="all") # 'all', 'easy', 'medium', 'hard' duration_seconds = Column(Integer, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) finished_at = Column(DateTime, nullable=True) class LeaderboardEntry(Base): __tablename__ = "leaderboard_entries" id = Column(Integer, primary_key=True, index=True, autoincrement=True) nickname = Column(String(50), nullable=False, index=True) score = Column(Integer, nullable=False, index=True) total_questions = Column(Integer, default=10) time_seconds = Column(Integer, nullable=False, index=True) difficulty = Column(String(20), default="all", index=True) lang = Column(String(10), default="de") session_id = Column(String(36), nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow, index=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)