You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.4 KiB
128 lines
3.4 KiB
package repository |
|
|
|
import ( |
|
"gofaster/internal/model" |
|
|
|
"gorm.io/gorm" |
|
) |
|
|
|
type WorkflowRepo struct { |
|
BaseRepo |
|
} |
|
|
|
func NewWorkflowRepo(db *gorm.DB) *WorkflowRepo { |
|
return &WorkflowRepo{BaseRepo{db: db}} |
|
} |
|
|
|
// Workflow CRUD |
|
func (r *WorkflowRepo) CreateWorkflow(workflow *model.Workflow) error { |
|
return r.db.Create(workflow).Error |
|
} |
|
|
|
func (r *WorkflowRepo) GetWorkflowByID(id uint) (*model.Workflow, error) { |
|
var workflow model.Workflow |
|
err := r.db.Preload("Nodes").First(&workflow, id).Error |
|
return &workflow, err |
|
} |
|
|
|
func (r *WorkflowRepo) UpdateWorkflow(workflow *model.Workflow) error { |
|
return r.db.Save(workflow).Error |
|
} |
|
|
|
func (r *WorkflowRepo) DeleteWorkflow(id uint) error { |
|
return r.db.Delete(&model.Workflow{}, id).Error |
|
} |
|
|
|
func (r *WorkflowRepo) ListWorkflows(page, pageSize int) ([]model.Workflow, int64, error) { |
|
var workflows []model.Workflow |
|
var count int64 |
|
|
|
err := r.db.Model(&model.Workflow{}).Count(&count).Error |
|
if err != nil { |
|
return nil, 0, err |
|
} |
|
|
|
offset := (page - 1) * pageSize |
|
err = r.db.Preload("Nodes").Offset(offset).Limit(pageSize).Find(&workflows).Error |
|
return workflows, count, err |
|
} |
|
|
|
// WorkflowNode operations |
|
func (r *WorkflowRepo) AddNode(node *model.WorkflowNode) error { |
|
return r.db.Create(node).Error |
|
} |
|
|
|
func (r *WorkflowRepo) UpdateNode(node *model.WorkflowNode) error { |
|
return r.db.Save(node).Error |
|
} |
|
|
|
func (r *WorkflowRepo) DeleteNode(id uint) error { |
|
return r.db.Delete(&model.WorkflowNode{}, id).Error |
|
} |
|
|
|
func (r *WorkflowRepo) GetNodeByID(id uint) (*model.WorkflowNode, error) { |
|
var node model.WorkflowNode |
|
err := r.db.First(&node, id).Error |
|
return &node, err |
|
} |
|
|
|
// WorkflowInstance operations |
|
func (r *WorkflowRepo) CreateInstance(instance *model.WorkflowInstance) error { |
|
return r.db.Create(instance).Error |
|
} |
|
|
|
func (r *WorkflowRepo) GetInstanceByID(id uint) (*model.WorkflowInstance, error) { |
|
var instance model.WorkflowInstance |
|
err := r.db.Preload("Tasks").First(&instance, id).Error |
|
return &instance, err |
|
} |
|
|
|
func (r *WorkflowRepo) UpdateInstance(instance *model.WorkflowInstance) error { |
|
return r.db.Save(instance).Error |
|
} |
|
|
|
func (r *WorkflowRepo) ListInstances(workflowID uint, page, pageSize int) ([]model.WorkflowInstance, int64, error) { |
|
var instances []model.WorkflowInstance |
|
var count int64 |
|
|
|
query := r.db.Model(&model.WorkflowInstance{}) |
|
if workflowID != 0 { |
|
query = query.Where("workflow_id = ?", workflowID) |
|
} |
|
|
|
err := query.Count(&count).Error |
|
if err != nil { |
|
return nil, 0, err |
|
} |
|
|
|
offset := (page - 1) * pageSize |
|
err = query.Preload("Tasks").Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&instances).Error |
|
return instances, count, err |
|
} |
|
|
|
// WorkflowTask operations |
|
func (r *WorkflowRepo) CreateTask(task *model.WorkflowTask) error { |
|
return r.db.Create(task).Error |
|
} |
|
|
|
func (r *WorkflowRepo) GetTaskByID(id uint) (*model.WorkflowTask, error) { |
|
var task model.WorkflowTask |
|
err := r.db.First(&task, id).Error |
|
return &task, err |
|
} |
|
|
|
func (r *WorkflowRepo) UpdateTask(task *model.WorkflowTask) error { |
|
return r.db.Save(task).Error |
|
} |
|
|
|
func (r *WorkflowRepo) ListTasksByInstance(instanceID uint) ([]model.WorkflowTask, error) { |
|
var tasks []model.WorkflowTask |
|
err := r.db.Where("instance_id = ?", instanceID).Order("created_at").Find(&tasks).Error |
|
return tasks, err |
|
} |
|
|
|
func (r *WorkflowRepo) ListPendingTasks() ([]model.WorkflowTask, error) { |
|
var tasks []model.WorkflowTask |
|
err := r.db.Where("status = ?", "pending").Order("created_at").Find(&tasks).Error |
|
return tasks, err |
|
}
|
|
|