30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import ARRAY, CheckConstraint, DateTime, ForeignKey, String, Text, text
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.db.base import Base
|
|
|
|
|
|
class PhaseTemplate(Base):
|
|
__tablename__ = "phase_template"
|
|
__table_args__ = (
|
|
CheckConstraint(text("cardinality(column_keys) > 0"), name="chk_v4_phase_template_columns"),
|
|
CheckConstraint(text("role != 'ADMIN'"), name="chk_v4_phase_template_no_admin"),
|
|
CheckConstraint(text("closes_at > opens_at"), name="chk_v4_phase_template_window"),
|
|
{"schema": "v3"},
|
|
)
|
|
|
|
form_type: Mapped[str] = mapped_column(String, ForeignKey("v3.form_type.code"), primary_key=True)
|
|
sheet: Mapped[str] = mapped_column(String, primary_key=True)
|
|
phase_code: Mapped[str] = mapped_column(String, primary_key=True)
|
|
role: Mapped[str] = mapped_column(String, ForeignKey("v3.role.code"))
|
|
column_keys: Mapped[list[str]] = mapped_column(ARRAY(Text))
|
|
opens_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
|
|
closes_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
|
|
|
|
# form_type_rel = relationship("FormType", foreign_keys=[form_type])
|
|
# role_rel = relationship("Role", foreign_keys=[role], back_populates="phase_templates")
|