Files
condflow/tests/fixtures/init_condflow_cache.gobak

98 lines
3.1 KiB
Plaintext

package fixtures
import (
// "fmt"
// "git.fsdpf.net/go/contracts"
"git.fsdpf.net/go/contracts/base"
// "git.fsdpf.net/go/db"
"github.com/samber/do"
"github.com/samber/lo"
)
func init() {
caches = append(caches, _ResCache{injector: func(app *do.Injector) {
do.Provide(app, GetCondflowServiceProvider)
// 缓存 Condflow
do.Provide(app, func(i *do.Injector) ([]base.Condflow, error) {
defer useRefreshCache(i, "Condflow", func() error {
do.Override(i, GetCondflowServiceProvider)
do.Override(i, func(i *do.Injector) ([]base.Condflow, error) {
return getCondflowCaches(i)
})
return nil
})
return getCondflowCaches(i)
})
}, priority: 0})
}
func GetCondflowServiceProvider(container *do.Injector) (base.GetCondflow, error) {
caches := do.MustInvoke[[]base.Condflow](container)
return func(code string) (base.Condflow, bool) {
item, flag := lo.Find(caches, func(i base.Condflow) bool {
return i.Code == code || i.Uuid == code
})
return item, flag
}, nil
}
func getCondflowCaches(app *do.Injector) (items []base.Condflow, err error) {
// TODO: 临时测试数据,等待资源表创建后从数据库读取
// if res, ok := do.MustInvoke[contracts.GetResource](app)("Condflow"); !ok {
// return items, fmt.Errorf("获取 Condflow 资源失败")
// } else {
// items = []base.Condflow{}
// if e := res.GetDBTable(base.GetSystemUser()).
// Select(
// db.T("Condflow").All(),
// ).
// Order(db.I("Condflow.id").Asc()).
// ScanStructs(&items); e != nil {
// err = fmt.Errorf("获取 Condflow 资源失败, %w", e)
// }
// }
//
items = []base.Condflow{
{
Uuid: "550e8400-e29b-41d4-a716-446655440001",
Name: "用户审批流程",
Code: "user-approval-flow",
Comment: "处理用户申请的审批流程,根据金额和信用评分自动分配审批策略",
Params: []base.CondflowParam{
{Name: "申请金额", Code: "amount", DataType: "decimal", IsRequired: true, Comment: "申请的金额"},
{Name: "用户信息", Code: "user", DataType: "json", IsRequired: true, Comment: "用户详细信息"},
},
CreatedAt: "2024-01-01 00:00:00",
UpdatedAt: "2024-01-01 00:00:00",
},
{
Uuid: "550e8400-e29b-41d4-a716-446655440002",
Name: "邮件营销活动流程",
Code: "email-campaign-flow",
Comment: "根据用户等级和活跃度自动发送不同类型的营销邮件",
Params: []base.CondflowParam{
{Name: "用户信息", Code: "user", DataType: "json", IsRequired: true, Comment: "用户详细信息"},
},
CreatedAt: "2024-01-01 00:00:00",
UpdatedAt: "2024-01-01 00:00:00",
},
{
Uuid: "550e8400-e29b-41d4-a716-446655440003",
Name: "订单处理流程",
Code: "order-processing-flow",
Comment: "订单自动化处理流程,包括配送方式选择和客户通知",
Params: []base.CondflowParam{
{Name: "订单信息", Code: "order", DataType: "json", IsRequired: true, Comment: "订单详细信息"},
{Name: "用户信息", Code: "user", DataType: "json", IsRequired: true, Comment: "下单用户信息"},
},
CreatedAt: "2024-01-01 00:00:00",
UpdatedAt: "2024-01-01 00:00:00",
},
}
return
}