diff --git a/backend/application/app/init.go b/backend/application/app/init.go index 595968de..d658f649 100644 --- a/backend/application/app/init.go +++ b/backend/application/app/init.go @@ -17,7 +17,6 @@ package app import ( - redisV9 "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/domain/app/repository" @@ -26,6 +25,7 @@ import ( variables "github.com/coze-dev/coze-studio/backend/domain/memory/variables/service" search "github.com/coze-dev/coze-studio/backend/domain/search/service" user "github.com/coze-dev/coze-studio/backend/domain/user/service" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/infra/contract/modelmgr" "github.com/coze-dev/coze-studio/backend/infra/contract/storage" @@ -35,7 +35,7 @@ type ServiceComponents struct { IDGen idgen.IDGenerator DB *gorm.DB OSS storage.Storage - CacheCli *redisV9.Client + CacheCli cache.Cmdable ProjectEventBus search.ProjectEventBus ModelMgr modelmgr.Manager diff --git a/backend/application/memory/init.go b/backend/application/memory/init.go index ae9de88e..0ac50729 100644 --- a/backend/application/memory/init.go +++ b/backend/application/memory/init.go @@ -19,12 +19,11 @@ package memory import ( "gorm.io/gorm" - "github.com/redis/go-redis/v9" - database "github.com/coze-dev/coze-studio/backend/domain/memory/database/service" "github.com/coze-dev/coze-studio/backend/domain/memory/variables/repository" variables "github.com/coze-dev/coze-studio/backend/domain/memory/variables/service" search "github.com/coze-dev/coze-studio/backend/domain/search/service" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/infra/contract/rdb" "github.com/coze-dev/coze-studio/backend/infra/contract/storage" @@ -43,7 +42,7 @@ type ServiceComponents struct { EventBus search.ResourceEventBus TosClient storage.Storage ResourceDomainNotifier search.ResourceEventBus - CacheCli *redis.Client + CacheCli cache.Cmdable } func InitService(c *ServiceComponents) *MemoryApplicationServices { diff --git a/backend/application/singleagent/init.go b/backend/application/singleagent/init.go index 660c2b01..d8d724a0 100644 --- a/backend/application/singleagent/init.go +++ b/backend/application/singleagent/init.go @@ -18,9 +18,10 @@ package singleagent import ( "github.com/cloudwego/eino/compose" - "github.com/redis/go-redis/v9" "gorm.io/gorm" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" + "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/entity" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/repository" singleagent "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/service" @@ -50,7 +51,7 @@ var SingleAgentSVC *SingleAgentApplicationService type ServiceComponents struct { IDGen idgen.IDGenerator DB *gorm.DB - Cache *redis.Client + Cache cache.Cmdable TosClient storage.Storage ImageX imagex.ImageX EventBus search.ProjectEventBus diff --git a/backend/application/workflow/init.go b/backend/application/workflow/init.go index 56ccf0ba..7e6d5a90 100644 --- a/backend/application/workflow/init.go +++ b/backend/application/workflow/init.go @@ -20,12 +20,9 @@ import ( "context" "github.com/cloudwego/eino/compose" - "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/application/internal" - "github.com/coze-dev/coze-studio/backend/pkg/logs" - wfdatabase "github.com/coze-dev/coze-studio/backend/crossdomain/workflow/database" wfknowledge "github.com/coze-dev/coze-studio/backend/crossdomain/workflow/knowledge" wfmodel "github.com/coze-dev/coze-studio/backend/crossdomain/workflow/model" @@ -46,17 +43,19 @@ import ( crosssearch "github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/search" crossvariable "github.com/coze-dev/coze-studio/backend/domain/workflow/crossdomain/variable" "github.com/coze-dev/coze-studio/backend/domain/workflow/service" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/coderunner" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/infra/contract/imagex" "github.com/coze-dev/coze-studio/backend/infra/contract/modelmgr" "github.com/coze-dev/coze-studio/backend/infra/contract/storage" + "github.com/coze-dev/coze-studio/backend/pkg/logs" ) type ServiceComponents struct { IDGen idgen.IDGenerator DB *gorm.DB - Cache *redis.Client + Cache cache.Cmdable DatabaseDomainSVC dbservice.Database VariablesDomainSVC variables.Variables PluginDomainSVC plugin.PluginService diff --git a/backend/domain/agent/singleagent/internal/dal/agent_display_info.go b/backend/domain/agent/singleagent/internal/dal/agent_display_info.go index d38cef79..1ea95c7b 100644 --- a/backend/domain/agent/singleagent/internal/dal/agent_display_info.go +++ b/backend/domain/agent/singleagent/internal/dal/agent_display_info.go @@ -22,10 +22,9 @@ import ( "errors" "fmt" - "github.com/redis/go-redis/v9" - "github.com/coze-dev/coze-studio/backend/api/model/ocean/cloud/developer_api" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/entity" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/errorx" "github.com/coze-dev/coze-studio/backend/types/errno" ) @@ -53,7 +52,7 @@ func (sa *SingleAgentDraftDAO) UpdateDisplayInfo(ctx context.Context, userID int func (sa *SingleAgentDraftDAO) GetDisplayInfo(ctx context.Context, userID, agentID int64) (*entity.AgentDraftDisplayInfo, error) { key := makeAgentDisplayInfoKey(userID, agentID) data, err := sa.cacheClient.Get(ctx, key).Result() - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { tabStatusDefault := developer_api.TabStatus_Default return &entity.AgentDraftDisplayInfo{ AgentID: agentID, diff --git a/backend/domain/agent/singleagent/internal/dal/counter.go b/backend/domain/agent/singleagent/internal/dal/counter.go index 05c2ffe5..152b3274 100644 --- a/backend/domain/agent/singleagent/internal/dal/counter.go +++ b/backend/domain/agent/singleagent/internal/dal/counter.go @@ -20,24 +20,23 @@ import ( "context" "strconv" - "github.com/redis/go-redis/v9" - + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/errorx" ) -func NewCountRepo(cli *redis.Client) *CounterImpl { +func NewCountRepo(cli cache.Cmdable) *CounterImpl { return &CounterImpl{ cacheClient: cli, } } type CounterImpl struct { - cacheClient *redis.Client + cacheClient cache.Cmdable } func (c *CounterImpl) Get(ctx context.Context, key string) (int64, error) { val, err := c.cacheClient.Get(ctx, key).Result() - if err == redis.Nil { + if err == cache.Nil { return 0, nil } if err != nil { diff --git a/backend/domain/agent/singleagent/internal/dal/single_agent_draft.go b/backend/domain/agent/singleagent/internal/dal/single_agent_draft.go index c868f0a7..c4e0dfc3 100644 --- a/backend/domain/agent/singleagent/internal/dal/single_agent_draft.go +++ b/backend/domain/agent/singleagent/internal/dal/single_agent_draft.go @@ -20,13 +20,13 @@ import ( "context" "errors" - "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/singleagent" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/entity" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/internal/dal/model" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/internal/dal/query" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/pkg/errorx" "github.com/coze-dev/coze-studio/backend/types/errno" @@ -35,10 +35,10 @@ import ( type SingleAgentDraftDAO struct { idGen idgen.IDGenerator dbQuery *query.Query - cacheClient *redis.Client + cacheClient cache.Cmdable } -func NewSingleAgentDraftDAO(db *gorm.DB, idGen idgen.IDGenerator, cli *redis.Client) *SingleAgentDraftDAO { +func NewSingleAgentDraftDAO(db *gorm.DB, idGen idgen.IDGenerator, cli cache.Cmdable) *SingleAgentDraftDAO { query.SetDefault(db) return &SingleAgentDraftDAO{ diff --git a/backend/domain/agent/singleagent/repository/repository.go b/backend/domain/agent/singleagent/repository/repository.go index 520bafed..ea87b6c6 100644 --- a/backend/domain/agent/singleagent/repository/repository.go +++ b/backend/domain/agent/singleagent/repository/repository.go @@ -19,15 +19,15 @@ package repository import ( "context" - "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/entity" "github.com/coze-dev/coze-studio/backend/domain/agent/singleagent/internal/dal" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" ) -func NewSingleAgentRepo(db *gorm.DB, idGen idgen.IDGenerator, cli *redis.Client) SingleAgentDraftRepo { +func NewSingleAgentRepo(db *gorm.DB, idGen idgen.IDGenerator, cli cache.Cmdable) SingleAgentDraftRepo { return dal.NewSingleAgentDraftDAO(db, idGen, cli) } @@ -35,7 +35,7 @@ func NewSingleAgentVersionRepo(db *gorm.DB, idGen idgen.IDGenerator) SingleAgent return dal.NewSingleAgentVersion(db, idGen) } -func NewCounterRepo(cli *redis.Client) CounterRepository { +func NewCounterRepo(cli cache.Cmdable) CounterRepository { return dal.NewCountRepo(cli) } diff --git a/backend/domain/app/internal/dal/cache.go b/backend/domain/app/internal/dal/cache.go index 1956ab0e..3edc8484 100644 --- a/backend/domain/app/internal/dal/cache.go +++ b/backend/domain/app/internal/dal/cache.go @@ -21,16 +21,15 @@ import ( "errors" "time" - redisV9 "github.com/redis/go-redis/v9" - + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/lang/ptr" ) type AppCache struct { - cacheCli *redisV9.Client + cacheCli cache.Cmdable } -func NewAppCache(cacheCli *redisV9.Client) *AppCache { +func NewAppCache(cacheCli cache.Cmdable) *AppCache { return &AppCache{ cacheCli: cacheCli, } @@ -39,7 +38,7 @@ func NewAppCache(cacheCli *redisV9.Client) *AppCache { func (a *AppCache) Get(ctx context.Context, key string) (value string, exist bool, err error) { cmd := a.cacheCli.Get(ctx, key) if cmd.Err() != nil { - if errors.Is(cmd.Err(), redisV9.Nil) { + if errors.Is(cmd.Err(), cache.Nil) { return "", false, nil } return "", false, cmd.Err() diff --git a/backend/domain/app/repository/app_impl.go b/backend/domain/app/repository/app_impl.go index e79c4b0e..42845d04 100644 --- a/backend/domain/app/repository/app_impl.go +++ b/backend/domain/app/repository/app_impl.go @@ -25,12 +25,12 @@ import ( "sync" "time" - redisV9 "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/domain/app/entity" "github.com/coze-dev/coze-studio/backend/domain/app/internal/dal" "github.com/coze-dev/coze-studio/backend/domain/app/internal/dal/query" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/pkg/lang/ptr" "github.com/coze-dev/coze-studio/backend/pkg/logs" @@ -50,7 +50,7 @@ type appRepoImpl struct { type APPRepoComponents struct { IDGen idgen.IDGenerator DB *gorm.DB - CacheCli *redisV9.Client + CacheCli cache.Cmdable } func NewAPPRepo(components *APPRepoComponents) AppRepository { diff --git a/backend/domain/knowledge/service/knowledge.go b/backend/domain/knowledge/service/knowledge.go index c98b42f6..98019945 100644 --- a/backend/domain/knowledge/service/knowledge.go +++ b/backend/domain/knowledge/service/knowledge.go @@ -32,21 +32,19 @@ import ( "unicode/utf8" "github.com/bytedance/sonic" - redisV9 "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/knowledge" knowledgeModel "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/knowledge" "github.com/coze-dev/coze-studio/backend/api/model/ocean/cloud/developer_api" "github.com/coze-dev/coze-studio/backend/application/base/ctxutil" - "github.com/coze-dev/coze-studio/backend/domain/knowledge/repository" - "github.com/coze-dev/coze-studio/backend/domain/knowledge/entity" "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/consts" "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/convert" "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model" "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/events" "github.com/coze-dev/coze-studio/backend/domain/knowledge/processor/impl" + "github.com/coze-dev/coze-studio/backend/domain/knowledge/repository" "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel" "github.com/coze-dev/coze-studio/backend/infra/contract/document/nl2sql" @@ -1484,7 +1482,7 @@ func (k *knowledgeSVC) getObjectURL(ctx context.Context, uri string) (string, er if err != nil { return "", errorx.New(errno.ErrKnowledgeGetObjectURLFailCode, errorx.KV("msg", fmt.Sprintf("get object url failed, %v", err))) } - if errors.Is(cmd.Err(), redisV9.Nil) { + if errors.Is(cmd.Err(), cache.Nil) { err = k.cacheCli.Set(ctx, uri, url, cacheTime*time.Second).Err() if err != nil { logs.CtxErrorf(ctx, "[getObjectURL] set cache failed, %v", err) diff --git a/backend/domain/memory/database/service/database_impl.go b/backend/domain/memory/database/service/database_impl.go index c5d6b9e9..d2dbdb37 100644 --- a/backend/domain/memory/database/service/database_impl.go +++ b/backend/domain/memory/database/service/database_impl.go @@ -32,6 +32,8 @@ import ( "github.com/tealeg/xlsx/v3" "gorm.io/gorm" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" + "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/database" "github.com/coze-dev/coze-studio/backend/api/model/ocean/cloud/bot_common" "github.com/coze-dev/coze-studio/backend/api/model/table" @@ -64,10 +66,10 @@ type databaseService struct { onlineDAO repository.OnlineDAO agentToDatabaseDAO repository.AgentToDatabaseDAO storage storage.Storage - cache *redis.Client + cache cache.Cmdable } -func NewService(rdb rdb.RDB, db *gorm.DB, generator idgen.IDGenerator, storage storage.Storage, cacheCli *redis.Client) Database { +func NewService(rdb rdb.RDB, db *gorm.DB, generator idgen.IDGenerator, storage storage.Storage, cacheCli cache.Cmdable) Database { return &databaseService{ rdb: rdb, db: db, diff --git a/backend/domain/plugin/internal/dal/cache.go b/backend/domain/plugin/internal/dal/cache.go index 244905b1..17b856f5 100644 --- a/backend/domain/plugin/internal/dal/cache.go +++ b/backend/domain/plugin/internal/dal/cache.go @@ -21,16 +21,15 @@ import ( "errors" "time" - redisV9 "github.com/redis/go-redis/v9" - + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/lang/ptr" ) type OAuthCache struct { - cacheCli *redisV9.Client + cacheCli cache.Cmdable } -func NewOAuthCache(cacheCli *redisV9.Client) *OAuthCache { +func NewOAuthCache(cacheCli cache.Cmdable) *OAuthCache { return &OAuthCache{ cacheCli: cacheCli, } @@ -39,7 +38,7 @@ func NewOAuthCache(cacheCli *redisV9.Client) *OAuthCache { func (o *OAuthCache) Get(ctx context.Context, key string) (value string, exist bool, err error) { cmd := o.cacheCli.Get(ctx, key) if cmd.Err() != nil { - if errors.Is(cmd.Err(), redisV9.Nil) { + if errors.Is(cmd.Err(), cache.Nil) { return "", false, nil } return "", false, cmd.Err() diff --git a/backend/domain/workflow/internal/repo/cancel_signal_store.go b/backend/domain/workflow/internal/repo/cancel_signal_store.go index b07bec97..9c49d028 100644 --- a/backend/domain/workflow/internal/repo/cancel_signal_store.go +++ b/backend/domain/workflow/internal/repo/cancel_signal_store.go @@ -21,14 +21,13 @@ import ( "fmt" "time" - "github.com/redis/go-redis/v9" - "github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/types/errno" ) type cancelSignalStoreImpl struct { - redis *redis.Client + redis cache.Cmdable } const workflowExecutionCancelStatusKey = "workflow:cancel:status:%d" diff --git a/backend/domain/workflow/internal/repo/execute_history_store.go b/backend/domain/workflow/internal/repo/execute_history_store.go index d1c16e08..12c9e1ca 100644 --- a/backend/domain/workflow/internal/repo/execute_history_store.go +++ b/backend/domain/workflow/internal/repo/execute_history_store.go @@ -23,13 +23,13 @@ import ( "strconv" "time" - "github.com/redis/go-redis/v9" "gorm.io/gorm" "github.com/coze-dev/coze-studio/backend/domain/workflow/entity" "github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/repo/dal/model" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/repo/dal/query" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/lang/ptr" "github.com/coze-dev/coze-studio/backend/pkg/lang/slices" "github.com/coze-dev/coze-studio/backend/pkg/lang/ternary" @@ -40,7 +40,7 @@ import ( type executeHistoryStoreImpl struct { query *query.Query - redis *redis.Client + redis cache.Cmdable } func (e *executeHistoryStoreImpl) CreateWorkflowExecution(ctx context.Context, execution *entity.WorkflowExecution) (err error) { @@ -457,7 +457,7 @@ func (e *executeHistoryStoreImpl) loadNodeExecutionFromRedis(ctx context.Context result, err := e.redis.Get(ctx, key).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return nil } return vo.WrapError(errno.ErrRedisError, err) @@ -523,7 +523,7 @@ func (e *executeHistoryStoreImpl) GetTestRunLatestExeID(ctx context.Context, wfI key := fmt.Sprintf(testRunLastExeKey, wfID, uID) exeIDStr, err := e.redis.Get(ctx, key).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return 0, nil } return 0, vo.WrapError(errno.ErrRedisError, err) @@ -548,7 +548,7 @@ func (e *executeHistoryStoreImpl) GetNodeDebugLatestExeID(ctx context.Context, w key := fmt.Sprintf(nodeDebugLastExeKey, wfID, nodeID, uID) exeIDStr, err := e.redis.Get(ctx, key).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return 0, nil } return 0, vo.WrapError(errno.ErrRedisError, err) diff --git a/backend/domain/workflow/internal/repo/interrupt_event_store.go b/backend/domain/workflow/internal/repo/interrupt_event_store.go index 81efba51..31d855df 100644 --- a/backend/domain/workflow/internal/repo/interrupt_event_store.go +++ b/backend/domain/workflow/internal/repo/interrupt_event_store.go @@ -22,16 +22,15 @@ import ( "fmt" "time" - "github.com/redis/go-redis/v9" - "github.com/coze-dev/coze-studio/backend/domain/workflow/entity" "github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/pkg/sonic" "github.com/coze-dev/coze-studio/backend/types/errno" ) type interruptEventStoreImpl struct { - redis *redis.Client + redis cache.Cmdable } const ( @@ -81,7 +80,7 @@ func (i *interruptEventStoreImpl) SaveInterruptEvents(ctx context.Context, wfExe previousEventStr, err := i.redis.Get(ctx, previousResumedEventKey).Result() if err != nil { - if !errors.Is(err, redis.Nil) { + if !errors.Is(err, cache.Nil) { return fmt.Errorf("failed to get previous resumed event for wfExeID %d: %w", wfExeID, err) } } @@ -154,7 +153,7 @@ func (i *interruptEventStoreImpl) GetFirstInterruptEvent(ctx context.Context, wf eventJSON, err := i.redis.LIndex(ctx, listKey, 0).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return nil, false, nil // List is empty or key does not exist } return nil, false, fmt.Errorf("failed to get first interrupt event from Redis list for wfExeID %d: %w", wfExeID, err) @@ -203,7 +202,7 @@ func (i *interruptEventStoreImpl) PopFirstInterruptEvent(ctx context.Context, wf eventJSON, err := i.redis.LPop(ctx, listKey).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return nil, false, nil // List is empty or key does not exist } return nil, false, vo.WrapError(errno.ErrRedisError, @@ -227,7 +226,7 @@ func (i *interruptEventStoreImpl) ListInterruptEvents(ctx context.Context, wfExe eventJSONs, err := i.redis.LRange(ctx, listKey, 0, -1).Result() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return nil, nil // List is empty or key does not exist } return nil, vo.WrapError(errno.ErrRedisError, diff --git a/backend/domain/workflow/internal/repo/repository.go b/backend/domain/workflow/internal/repo/repository.go index c5a25436..9fe4fef6 100644 --- a/backend/domain/workflow/internal/repo/repository.go +++ b/backend/domain/workflow/internal/repo/repository.go @@ -25,7 +25,6 @@ import ( einoCompose "github.com/cloudwego/eino/compose" "github.com/cloudwego/eino/schema" - "github.com/redis/go-redis/v9" "golang.org/x/exp/maps" "gorm.io/gen" "gorm.io/gen/field" @@ -41,6 +40,7 @@ import ( "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/execute" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/repo/dal/model" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/repo/dal/query" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" cm "github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/infra/contract/storage" @@ -61,7 +61,7 @@ const ( type RepositoryImpl struct { idgen.IDGenerator query *query.Query - redis *redis.Client + redis cache.Cmdable tos storage.Storage einoCompose.CheckPointStore workflow.InterruptEventStore @@ -70,7 +70,7 @@ type RepositoryImpl struct { builtinModel cm.BaseChatModel } -func NewRepository(idgen idgen.IDGenerator, db *gorm.DB, redis *redis.Client, tos storage.Storage, +func NewRepository(idgen idgen.IDGenerator, db *gorm.DB, redis cache.Cmdable, tos storage.Storage, cpStore einoCompose.CheckPointStore, chatModel cm.BaseChatModel) workflow.Repository { return &RepositoryImpl{ IDGenerator: idgen, diff --git a/backend/domain/workflow/service/service_impl.go b/backend/domain/workflow/service/service_impl.go index 45418fbe..ef6a374b 100644 --- a/backend/domain/workflow/service/service_impl.go +++ b/backend/domain/workflow/service/service_impl.go @@ -24,7 +24,7 @@ import ( "time" einoCompose "github.com/cloudwego/eino/compose" - "github.com/redis/go-redis/v9" + "github.com/spf13/cast" "golang.org/x/exp/maps" "golang.org/x/sync/errgroup" @@ -39,6 +39,7 @@ import ( "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/canvas/adaptor" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/compose" "github.com/coze-dev/coze-studio/backend/domain/workflow/internal/repo" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" "github.com/coze-dev/coze-studio/backend/infra/contract/storage" @@ -67,7 +68,7 @@ func NewWorkflowService(repo workflow.Repository) workflow.Service { } } -func NewWorkflowRepository(idgen idgen.IDGenerator, db *gorm.DB, redis *redis.Client, tos storage.Storage, +func NewWorkflowRepository(idgen idgen.IDGenerator, db *gorm.DB, redis cache.Cmdable, tos storage.Storage, cpStore einoCompose.CheckPointStore, chatModel chatmodel.BaseChatModel) workflow.Repository { return repo.NewRepository(idgen, db, redis, tos, cpStore, chatModel) } diff --git a/backend/infra/contract/cache/cache.go b/backend/infra/contract/cache/cache.go index 377df8fa..0555ea04 100644 --- a/backend/infra/contract/cache/cache.go +++ b/backend/infra/contract/cache/cache.go @@ -21,3 +21,5 @@ import ( ) type Cmdable = redis.Cmdable + +const Nil = redis.Nil diff --git a/backend/infra/impl/checkpoint/redis.go b/backend/infra/impl/checkpoint/redis.go index 6092d77d..059bc907 100644 --- a/backend/infra/impl/checkpoint/redis.go +++ b/backend/infra/impl/checkpoint/redis.go @@ -24,10 +24,12 @@ import ( "github.com/cloudwego/eino/compose" "github.com/redis/go-redis/v9" + + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" ) type redisStore struct { - client *redis.Client + client cache.Cmdable } const ( @@ -38,7 +40,7 @@ const ( func (r *redisStore) Get(ctx context.Context, checkPointID string) ([]byte, bool, error) { v, err := r.client.Get(ctx, fmt.Sprintf(checkpointKeyTpl, checkPointID)).Bytes() if err != nil { - if errors.Is(err, redis.Nil) { + if errors.Is(err, cache.Nil) { return nil, false, nil } return nil, false, err diff --git a/backend/infra/impl/document/progressbar/impl.go b/backend/infra/impl/document/progressbar/impl.go index a45badd3..5d50187c 100644 --- a/backend/infra/impl/document/progressbar/impl.go +++ b/backend/infra/impl/document/progressbar/impl.go @@ -22,8 +22,6 @@ import ( "fmt" "time" - "github.com/redis/go-redis/v9" - "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/document/progressbar" "github.com/coze-dev/coze-studio/backend/pkg/lang/conv" @@ -90,7 +88,7 @@ func (p *ProgressBarImpl) GetProgress(ctx context.Context) (percent int, remainS err error ) errMsg, err = p.CacheCli.Get(ctx, fmt.Sprintf(ProgressBarErrMsgRedisKey, p.PrimaryKeyID)).Result() - if err == redis.Nil { + if err == cache.Nil { errMsg = "" } else if err != nil { return ProcessDone, 0, err.Error() @@ -99,7 +97,7 @@ func (p *ProgressBarImpl) GetProgress(ctx context.Context) (percent int, remainS return ProcessDone, 0, errMsg } totalNumStr, err := p.CacheCli.Get(ctx, fmt.Sprintf(ProgressBarTotalNumRedisKey, p.PrimaryKeyID)).Result() - if err == redis.Nil || len(totalNumStr) == 0 { + if err == cache.Nil || len(totalNumStr) == 0 { totalNum = ptr.Of(int64(0)) } else if err != nil { return ProcessDone, 0, err.Error() @@ -112,7 +110,7 @@ func (p *ProgressBarImpl) GetProgress(ctx context.Context) (percent int, remainS } } processedNumStr, err := p.CacheCli.Get(ctx, fmt.Sprintf(ProgressBarProcessedNumRedisKey, p.PrimaryKeyID)).Result() - if err == redis.Nil || len(processedNumStr) == 0 { + if err == cache.Nil || len(processedNumStr) == 0 { processedNum = ptr.Of(int64(0)) } else if err != nil { return ProcessDone, 0, err.Error() @@ -128,7 +126,7 @@ func (p *ProgressBarImpl) GetProgress(ctx context.Context) (percent int, remainS return ProcessInit, DefaultProcessTime, "" } startTimeStr, err := p.CacheCli.Get(ctx, fmt.Sprintf(ProgressBarStartTimeRedisKey, p.PrimaryKeyID)).Result() - if err == redis.Nil || len(startTimeStr) == 0 { + if err == cache.Nil || len(startTimeStr) == 0 { startTime = ptr.Of(int64(0)) } else if err != nil { return ProcessDone, 0, err.Error() diff --git a/backend/infra/impl/idgen/idgen.go b/backend/infra/impl/idgen/idgen.go index 60400288..7fcd9fc9 100644 --- a/backend/infra/impl/idgen/idgen.go +++ b/backend/infra/impl/idgen/idgen.go @@ -21,7 +21,7 @@ import ( "fmt" "time" - "github.com/redis/go-redis/v9" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" "github.com/coze-dev/coze-studio/backend/infra/contract/idgen" ) @@ -33,7 +33,7 @@ const ( type IDGenerator = idgen.IDGenerator -func New(client *redis.Client) (idgen.IDGenerator, error) { +func New(client cache.Cmdable) (idgen.IDGenerator, error) { // Initialization code. return &idGenImpl{ cli: client, @@ -41,7 +41,7 @@ func New(client *redis.Client) (idgen.IDGenerator, error) { } type idGenImpl struct { - cli *redis.Client + cli cache.Cmdable namespace string } diff --git a/backend/pkg/jsoncache/jsoncache.go b/backend/pkg/jsoncache/jsoncache.go index a422ed52..24aacefe 100644 --- a/backend/pkg/jsoncache/jsoncache.go +++ b/backend/pkg/jsoncache/jsoncache.go @@ -21,15 +21,15 @@ import ( "encoding/json" "fmt" - "github.com/redis/go-redis/v9" + "github.com/coze-dev/coze-studio/backend/infra/contract/cache" ) type JsonCache[T any] struct { - cache *redis.Client + cache cache.Cmdable prefix string } -func New[T any](prefix string, cache *redis.Client) *JsonCache[T] { +func New[T any](prefix string, cache cache.Cmdable) *JsonCache[T] { return &JsonCache[T]{ prefix: prefix, cache: cache, @@ -59,7 +59,7 @@ func (g *JsonCache[T]) Get(ctx context.Context, k string) (*T, error) { var obj T data, err := g.cache.Get(ctx, key).Result() - if err == redis.Nil { + if err == cache.Nil { return &obj, nil }