""" New to iteration 2, this model defines the structure of form templates which group together multiple form fields using foreign key entity relationships, these templates are customized on the form management page on the agent and manager dashboard. """ # import relevant libraries from enum import Enum from sqlalchemy import ( Column, Integer, String, Text, DateTime, ForeignKey, Enum as SAEnum, ) from sqlalchemy.orm import relationship from sqlalchemy.sql import func # import declarative base from db_connect module from ..db.db_connect import Base # define enumeration values for status class FormTemplateStatus(str, Enum): DRAFT = "draft" PUBLISHED = "published" ARCHIVED = "archived" class FormTemplate(Base): __tablename__ = "form_templates" id = Column(Integer, primary_key=True, index=True) name = Column(String(128), nullable=False) description = Column(Text, nullable=True) status = Column(SAEnum(FormTemplateStatus, name="form_template_status"), nullable=False, default=FormTemplateStatus.DRAFT) created_by = Column(Integer, ForeignKey("users.id"), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) # foreign key relationship to User model author = relationship("User", backref="form_templates", foreign_keys=[created_by]) def __repr__(self) -> str: return f""