Initial commit: Location Management Flask app
This commit is contained in:
51
app/models/workflow.py
Normal file
51
app/models/workflow.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""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"<Workflow '{self.name}' "
|
||||
f"Board#{self.trigger_board_id}.in{self.trigger_input} "
|
||||
f"→ Board#{self.action_board_id}.relay{self.action_relay} [{self.action_type}]>"
|
||||
)
|
||||
Reference in New Issue
Block a user