Files
orbit/sdk/go/workflow_definitions.go

56 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package orbit
import (
"context"
"errors"
)
// WorkflowRef 构造输入或已完成步骤的字段引用;合法作用域及类型在发布时由服务端校验。
func WorkflowRef(source string, path ...string) WorkflowValue {
return WorkflowValue{Kind: "REFERENCE", Reference: &WorkflowReference{Source: source, Path: append([]string(nil), path...)}}
}
// CreateWorkflowDefinition 幂等创建稳定定义身份,不自动发布或启动流程。
func (c *Client) CreateWorkflowDefinition(ctx context.Context, key string, in CreateWorkflowDefinitionRequest) (WorkflowDefinitionResult, error) {
var out WorkflowDefinitionResult
err := c.call(ctx, "POST", "/v1/workflow-definitions", key, in, &out)
return out, err
}
func (c *Client) GetWorkflowDefinition(ctx context.Context, id string) (WorkflowDefinition, error) {
var out WorkflowDefinition
if !validID(id) {
return out, errors.New("invalid definition id")
}
err := c.call(ctx, "GET", "/v1/workflow-definitions/"+id, "", nil, &out)
return out, err
}
// PublishWorkflowVersion 冻结规则;网络结果不明时保留原定义ID、版本、内容、原因和幂等键重报。
func (c *Client) PublishWorkflowVersion(ctx context.Context, id, key string, in PublishWorkflowVersionRequest) (WorkflowVersionResult, error) {
var out WorkflowVersionResult
if !validID(id) {
return out, errors.New("invalid definition id")
}
err := c.call(ctx, "POST", "/v1/workflow-definitions/"+id+"/versions", key, in, &out)
return out, err
}
func (c *Client) GetWorkflowVersion(ctx context.Context, id, version string) (WorkflowVersion, error) {
var out WorkflowVersion
if !validID(id) || !workflowVersionName(version) {
return out, errors.New("invalid definition id or version")
}
err := c.call(ctx, "GET", "/v1/workflow-definitions/"+id+"/versions/"+version, "", nil, &out)
return out, err
}
func workflowVersionName(s string) bool {
if len(s) == 0 || len(s) > 64 {
return false
}
for i, r := range s {
if !(r >= 'a' && r <= 'z' || r >= 'A' && r <= 'Z' || r >= '0' && r <= '9' || i > 0 && (r == '_' || r == '.' || r == '-')) {
return false
}
}
return true
}