from sqlalchemy import Column, BigInteger, String, Text, Integer, ForeignKey from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import relationship from models.base import AuditBase class LibraryFile(AuditBase): subject = Column(String(45), nullable=False) module = Column(String(45), nullable=False) name = Column(String(45), nullable=False) type = Column(String(45), nullable=False) size = Column(Integer, nullable=False) content = Column(Text, nullable=False) questions = relationship( "LibraryFileQuestion", back_populates="library_file", cascade="all, delete-orphan" ) practice_record = relationship( "PracticeRecord", back_populates="library_file", cascade="all, delete-orphan" ) mistake = relationship( "Mistake", back_populates="library_file", cascade="all, delete-orphan" ) class LibraryFileQuestion(AuditBase): library_file_id = Column(BigInteger, ForeignKey("library_file.id"), nullable=False) type = Column(String(45), nullable=False) question = Column(Text, nullable=False) options = Column(JSONB, nullable=False) answer = Column(JSONB, nullable=False) library_file = relationship( "LibraryFile", back_populates="questions" ) mistake = relationship( "Mistake", back_populates="library_file_question", cascade="all, delete-orphan" ) class PracticeRecord(AuditBase): library_file_id = Column(BigInteger, ForeignKey("library_file.id"), nullable=False) total_count = Column(Integer, nullable=False) correct_count = Column(Integer, nullable=False) wrong_count = Column(Integer, nullable=False) library_file = relationship( "LibraryFile", back_populates="practice_record", ) class Mistake(AuditBase): library_file_id = Column(BigInteger, ForeignKey("library_file.id"), nullable=False) question_id = Column(BigInteger, ForeignKey("library_file_question.id"), nullable=False) wrong_count = Column(Integer, nullable=False) library_file = relationship( "LibraryFile", back_populates="mistake", ) library_file_question = relationship( "LibraryFileQuestion", back_populates="mistake", )