56 lines
2.1 KiB
Go
56 lines
2.1 KiB
Go
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
|
||
}
|