Files
quiz/app/models.py
T

68 lines
3.0 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)
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)