| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package models
- import (
- "time"
- )
- // WorkflowTemplate - JSON-configurable workflow definition (admin-managed)
- type WorkflowTemplate struct {
- ID uint `gorm:"primaryKey"`
- Name string `gorm:"size:200;not null;uniqueIndex"`
- Description string `gorm:"type:text"`
- Definition string `gorm:"type:text;not null"` // JSON DAG definition
- IsActive bool `gorm:"default:true"`
- CreatedByID uint
- CreatedBy User `gorm:"foreignKey:CreatedByID"`
- CreatedAt time.Time
- UpdatedAt time.Time
- }
- // WorkflowInstance - a running instance of a workflow (many-to-one with Service)
- type WorkflowInstance struct {
- ID uint `gorm:"primaryKey"`
- WorkflowTemplateID uint
- WorkflowTemplate WorkflowTemplate `gorm:"foreignKey:WorkflowTemplateID"`
- Status string `gorm:"size:50;not null"` // "running", "completed", "failed", "paused"
- Context string `gorm:"type:text"` // JSON workflow variables
- ServiceID *uint // Many-to-one: multiple workflows can belong to one service
- Service *Service `gorm:"foreignKey:ServiceID"`
- CreatedAt time.Time
- UpdatedAt time.Time
- CompletedAt *time.Time
- }
- // WorkflowNode - represents a task node in a workflow instance
- type WorkflowNode struct {
- ID uint `gorm:"primaryKey"`
- WorkflowInstanceID uint
- WorkflowInstance WorkflowInstance `gorm:"foreignKey:WorkflowInstanceID"`
- NodeKey string `gorm:"size:100;not null"`
- NodeType string `gorm:"size:50;not null"` // "task", "condition", "parallel", "join"
- Status string `gorm:"size:50;not null"` // "pending", "ready", "running", "completed", "skipped", "failed"
- TaskID *uint // Link to created task (assignment is on Task)
- Task *Task `gorm:"foreignKey:TaskID"`
- RetryCount int `gorm:"default:0"`
- InputData string `gorm:"type:text"`
- OutputData string `gorm:"type:text"`
- CreatedAt time.Time
- UpdatedAt time.Time
- StartedAt *time.Time
- CompletedAt *time.Time
- }
- // WorkflowEdge - dependency between nodes
- type WorkflowEdge struct {
- ID uint `gorm:"primaryKey"`
- WorkflowInstanceID uint
- FromNodeID uint
- FromNode WorkflowNode `gorm:"foreignKey:FromNodeID"`
- ToNodeID uint
- ToNode WorkflowNode `gorm:"foreignKey:ToNodeID"`
- Condition string `gorm:"type:text"`
- }
|