backend/med_backend/db/models/forms.py

157 lines
4.1 KiB
Python

from typing import List
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from med_backend.db.base import Base
from med_backend.db.models.users import UserScheme
class FormScheme(Base):
__tablename__ = "forms"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
name: str = Column(String, nullable=False)
# user
user_id: int = Column(Integer, ForeignKey(UserScheme.id), primary_key=True)
user: UserScheme = relationship("UserScheme", foreign_keys="FormScheme.user_id")
questions: List["FormQuestion"] = relationship(
"FormQuestion",
back_populates="form",
)
class FormQuestion(Base):
__tablename__ = "form_questions"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
# form
form_id: int = Column(Integer, ForeignKey(FormScheme.id), primary_key=True)
form: FormScheme = relationship("FormScheme", foreign_keys="FormQuestion.form_id")
type: str = Column(String, default="number")
question: str = Column(String, nullable=False)
ref_min: int = Column(Integer, nullable=True)
ref_max: int = Column(Integer, nullable=True)
class FormAssignment(Base):
__tablename__ = "form_assignment"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
form_id: int = Column(Integer, ForeignKey(FormScheme.id), primary_key=True)
form: FormScheme = relationship("FormScheme", foreign_keys="FormAssignment.form_id")
user_id: int = Column(Integer, ForeignKey(UserScheme.id), primary_key=True)
user: UserScheme = relationship("UserScheme", foreign_keys="FormAssignment.user_id")
class UserRevQuestion(Base):
__tablename__ = "user_form_rev_question"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
# question
question_id: int = Column(Integer, ForeignKey(FormQuestion.id), primary_key=True)
question: FormQuestion = relationship(
"FormQuestion",
foreign_keys="UserRevQuestion.question_id",
)
# user
user_id: int = Column(Integer, ForeignKey(UserScheme.id), primary_key=True)
user: UserScheme = relationship(
"UserScheme",
foreign_keys="UserRevQuestion.user_id",
)
ref_min: int = Column(Integer, nullable=False)
ref_max: int = Column(Integer, nullable=False)
class UserFormSubmission(Base):
__tablename__ = "user_form_submission"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
# form
form_id: int = Column(Integer, ForeignKey(FormScheme.id), primary_key=True)
form: FormScheme = relationship(
"FormScheme",
foreign_keys="UserFormSubmission.form_id",
)
# user
user_id: int = Column(Integer, ForeignKey(UserScheme.id), primary_key=True)
user: UserScheme = relationship(
"UserScheme",
foreign_keys="UserFormSubmission.user_id",
)
answers: List["UserFormFieldSubmission"] = relationship(
"UserFormFieldSubmission",
back_populates="submission",
)
class UserFormFieldSubmission(Base):
__tablename__ = "user_form_field_submission"
id: int = Column(
Integer,
primary_key=True,
autoincrement=True,
unique=True,
index=True,
)
# submission
submission_id: int = Column(
Integer,
ForeignKey(UserFormSubmission.id),
primary_key=True,
)
submission: UserFormSubmission = relationship(
"UserFormSubmission",
foreign_keys="UserFormFieldSubmission.submission_id",
)
# question
question_id: int = Column(Integer, ForeignKey(FormQuestion.id), primary_key=True)
question: FormQuestion = relationship(
"FormQuestion",
foreign_keys="UserFormFieldSubmission.question_id",
)
answer: str = Column(String)