29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from sqlalchemy import Column, Integer, String, Text, Float, ForeignKey, Enum
|
|
from sqlalchemy.orm import relationship
|
|
import enum
|
|
|
|
from app.db.base_class import Base
|
|
|
|
|
|
class QuestionType(str, enum.Enum):
|
|
MULTIPLE_CHOICE = "multiple_choice"
|
|
TRUE_FALSE = "true_false"
|
|
SHORT_ANSWER = "short_answer"
|
|
ESSAY = "essay"
|
|
|
|
|
|
class Question(Base):
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
exam_id = Column(Integer, ForeignKey("exam.id"), nullable=False)
|
|
text = Column(Text, nullable=False)
|
|
question_type = Column(Enum(QuestionType), nullable=False, default=QuestionType.MULTIPLE_CHOICE)
|
|
points = Column(Float, default=1.0)
|
|
image_url = Column(String(255), nullable=True) # Optional image for the question
|
|
solution = Column(Text, nullable=True) # Explanation of the answer
|
|
|
|
# Relationships
|
|
exam = relationship("Exam", back_populates="questions")
|
|
options = relationship("QuestionOption", back_populates="question", cascade="all, delete-orphan")
|
|
|
|
def __repr__(self):
|
|
return f"<Question {self.id}: {self.text[:30]}...>" |