Files
onepanel/repository/workflow_repository.go
2019-12-12 17:54:45 -08:00

94 lines
2.3 KiB
Go

package repository
import (
sq "github.com/Masterminds/squirrel"
"github.com/onepanelio/core/model"
)
type WorkflowRepository struct {
db *DB
sb sq.StatementBuilderType
}
func NewWorkflowRepository(db *DB) *WorkflowRepository {
return &WorkflowRepository{db: db, sb: sq.StatementBuilder.PlaceholderFormat(sq.Dollar)}
}
func (r *WorkflowRepository) CreateWorkflowTemplate(workflowTemplate *model.WorkflowTemplate) (*model.WorkflowTemplate, error) {
uid, err := workflowTemplate.GenerateUID()
if err != nil {
return nil, err
}
tx, err := r.db.Begin()
if err != nil {
return nil, err
}
defer tx.Rollback()
err = r.sb.Insert("workflow_templates").
SetMap(sq.Eq{
"uid": uid,
"name": workflowTemplate.Name,
}).
Suffix("RETURNING id").
RunWith(tx).
QueryRow().Scan(&workflowTemplate.ID)
if err != nil {
return nil, err
}
err = r.sb.Insert("workflow_template_versions").
SetMap(sq.Eq{
"workflow_template_id": workflowTemplate.ID,
"manifest": workflowTemplate.Manifest,
}).
Suffix("RETURNING version").
RunWith(tx).
QueryRow().Scan(&workflowTemplate.Version)
if err != nil {
return nil, err
}
if err = tx.Commit(); err != nil {
return nil, err
}
return workflowTemplate, nil
}
func (r *WorkflowRepository) GetWorkflowTemplate(uid string) (workflowTemplate *model.WorkflowTemplate, err error) {
workflowTemplate = &model.WorkflowTemplate{}
query, args, err := r.sb.Select("wt.uid", "wtv.version", "wtv.manifest").
From("workflow_template_versions wtv").
Join("workflow_templates wt ON wt.id = wtv.workflow_template_id").
Where(sq.Eq{"wt.uid": uid}).
OrderBy("wtv.version desc").
Limit(1).ToSql()
if err != nil {
return
}
err = r.db.Get(workflowTemplate, query, args...)
return
}
func (r *WorkflowRepository) ListWorkflowTemplateVersions(uid string) (workflowTemplateVersions []*model.WorkflowTemplate, err error) {
workflowTemplateVersions = []*model.WorkflowTemplate{}
query, args, err := r.sb.Select("wt.uid", "wtv.version", "wtv.manifest").
From("workflow_template_versions wtv").
Join("workflow_templates wt ON wt.id = wtv.workflow_template_id").
Where(sq.Eq{"wt.uid": uid}).
OrderBy("wtv.version desc").ToSql()
if err != nil {
return
}
err = r.db.Select(&workflowTemplateVersions, query, args...)
return
}