"""Workflow model. A workflow fires an action (set relay ON/OFF/TOGGLE) on a *target* board whenever a specific input on a *trigger* board changes state. """ from datetime import datetime from app import db class Workflow(db.Model): __tablename__ = "workflows" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), nullable=False) is_enabled = db.Column(db.Boolean, default=True, nullable=False) # ── trigger ────────────────────────────────────────────────────── trigger_board_id = db.Column( db.Integer, db.ForeignKey("boards.id", ondelete="CASCADE"), nullable=False ) trigger_input = db.Column(db.Integer, nullable=False) # 1-based # "press" (rising edge), "release" (falling), "both" trigger_event = db.Column(db.String(16), nullable=False, default="press") # ── action ─────────────────────────────────────────────────────── action_board_id = db.Column( db.Integer, db.ForeignKey("boards.id"), nullable=False ) action_relay = db.Column(db.Integer, nullable=False) # 1-based # "on", "off", "toggle" action_type = db.Column(db.String(16), nullable=False, default="toggle") created_at = db.Column(db.DateTime, default=datetime.utcnow) last_triggered = db.Column(db.DateTime, nullable=True) # ── relationships ──────────────────────────────────────────────── trigger_board = db.relationship( "Board", foreign_keys=[trigger_board_id], back_populates="workflows_trigger" ) action_board = db.relationship( "Board", foreign_keys=[action_board_id], back_populates="workflows_target" ) def __repr__(self) -> str: return ( f"" )