Files
ServerKit/backend/app/models/workflow.py
T
Juan DenisandClaude Opus 4.5 ee9826ff1f feat(20-1): Create Workflow model
- SQLAlchemy model with name, description, nodes, edges, viewport
- JSON string storage for React Flow state
- to_dict() method with node/edge counts
- User relationship and timestamps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 12:24:51 -05:00

45 lines
1.7 KiB
Python

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(100), nullable=False)
description = db.Column(db.Text, nullable=True)
# React Flow state stored as JSON strings
nodes = db.Column(db.Text, nullable=True) # JSON array of nodes
edges = db.Column(db.Text, nullable=True) # JSON array of edges
viewport = db.Column(db.Text, nullable=True) # JSON object {x, y, zoom}
# Metadata
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Foreign keys
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
# Relationships
user = db.relationship('User', backref=db.backref('workflows', lazy='dynamic'))
def to_dict(self):
import json
return {
'id': self.id,
'name': self.name,
'description': self.description,
'nodes': json.loads(self.nodes) if self.nodes else [],
'edges': json.loads(self.edges) if self.edges else [],
'viewport': json.loads(self.viewport) if self.viewport else None,
'created_at': self.created_at.isoformat() if self.created_at else None,
'updated_at': self.updated_at.isoformat() if self.updated_at else None,
'user_id': self.user_id,
'node_count': len(json.loads(self.nodes)) if self.nodes else 0,
'edge_count': len(json.loads(self.edges)) if self.edges else 0
}
def __repr__(self):
return f'<Workflow {self.name}>'