Initial commit: Location Management Flask app

This commit is contained in:
ske087
2026-02-26 19:24:17 +02:00
commit 7a22575dab
52 changed files with 3481 additions and 0 deletions

51
app/models/workflow.py Normal file
View 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}]>"
)