package logic import ( "joybuywork/internal/app" "joybuywork/internal/plugins/jsonm" "joybuywork/internal/repository/dao" "joybuywork/internal/service/provider/fissionaction" "joybuywork/internal/service/provider/operatelog" "joybuywork/internal/service/provider/traces" ) type CtxOption func(ctx *Context) func WithDao(dao *dao.Query) CtxOption { return func(ctx *Context) { ctx.dao = dao } } func WithFnTm(fnTm *traces.FnTimers) CtxOption { return func(ctx *Context) { ctx.fnTimer = fnTm } } type Option func(logic *Logic) // WithTran 使用事务的dao func WithTran() Option { return func(logic *Logic) { logic.Tran() } } // WithOnce 启用锁 func WithOnce(key string) Option { return func(logic *Logic) { logic.once = &once{ key: key, lock: app.NewRedisLock(logic.Ctx, key), } } } // WithBp 启用埋点 func WithBp() Option { return func(logic *Logic) { logic.markPoint = fissionaction.NewMarkPoint(logic.Ctx, fissionaction.SetBatch()) } } func WithErrNotifyEqCode(code ...int32) Option { return func(logic *Logic) { logic.errNotify.eqCode = code } } func WithErrNotifyNeqCode(code ...int32) Option { return func(logic *Logic) { logic.errNotify.neqCode = make(map[int32]struct{}, len(code)) for _, v := range code { logic.errNotify.neqCode[v] = struct{}{} } } } func WithErrData(data any) Option { return func(logic *Logic) { logic.errData, _ = jsonm.Marshal(data) } } // WithOl 启用操作记录 func WithOl() Option { return func(logic *Logic) { logic.ol = operatelog.NewOperateLog(logic.Ctx, operatelog.SetBatch()) } }