Files
study-agent-service/models/library.py

82 lines
2.3 KiB
Python

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",
)