38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
)
|
|
|
|
type TaskCancellationHooks struct {
|
|
Register func(string, context.CancelFunc)
|
|
Unregister func(string)
|
|
}
|
|
|
|
type taskCancellationHooksContextKey struct{}
|
|
type taskOperatorContextKey struct{}
|
|
|
|
func WithTaskCancellationHooks(ctx context.Context, hooks TaskCancellationHooks) context.Context {
|
|
return context.WithValue(ctx, taskCancellationHooksContextKey{}, hooks)
|
|
}
|
|
|
|
func TaskCancellationHooksFromContext(ctx context.Context) (TaskCancellationHooks, bool) {
|
|
hooks, ok := ctx.Value(taskCancellationHooksContextKey{}).(TaskCancellationHooks)
|
|
if !ok || hooks.Register == nil || hooks.Unregister == nil {
|
|
return TaskCancellationHooks{}, false
|
|
}
|
|
return hooks, true
|
|
}
|
|
|
|
// WithTaskOperator 将当前已认证操作者绑定到任务工作流上下文。
|
|
func WithTaskOperator(ctx context.Context, operatorID string) context.Context {
|
|
return context.WithValue(ctx, taskOperatorContextKey{}, strings.TrimSpace(operatorID))
|
|
}
|
|
|
|
// TaskOperatorFromContext 读取任务工作流的创建人;后台调度任务没有操作者时返回空字符串。
|
|
func TaskOperatorFromContext(ctx context.Context) string {
|
|
operatorID, _ := ctx.Value(taskOperatorContextKey{}).(string)
|
|
return strings.TrimSpace(operatorID)
|
|
}
|