This is an automated email from the ASF dual-hosted git repository.
linkinstar pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/answer.git
The following commit(s) were added to refs/heads/main by this push:
new b522a168 feat: add GetConfigByKeyFromDB method to retrieve config
directly
b522a168 is described below
commit b522a168e34ed954cf9f530c205d55daa4d4c7a7
Author: LinkinStars <[email protected]>
AuthorDate: Thu Jan 29 11:15:08 2026 +0800
feat: add GetConfigByKeyFromDB method to retrieve config directly
---
internal/repo/config/config_repo.go | 12 ++++++++++++
internal/service/config/config_service.go | 10 ++++++++++
internal/service/plugin_common/plugin_common_service.go | 2 +-
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/internal/repo/config/config_repo.go
b/internal/repo/config/config_repo.go
index 3708aa3e..bf0035cb 100644
--- a/internal/repo/config/config_repo.go
+++ b/internal/repo/config/config_repo.go
@@ -99,6 +99,18 @@ func (cr configRepo) GetConfigByKey(ctx context.Context, key
string) (c *entity.
return c, nil
}
+func (cr configRepo) GetConfigByKeyFromDB(ctx context.Context, key string) (c
*entity.Config, err error) {
+ c = &entity.Config{Key: key}
+ exist, err := cr.data.DB.Context(ctx).Get(c)
+ if err != nil {
+ return nil,
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
+ }
+ if !exist {
+ return nil, fmt.Errorf("config not found by key: %s", key)
+ }
+ return c, nil
+}
+
func (cr configRepo) UpdateConfig(ctx context.Context, key string, value
string) (err error) {
// check if key exists
oldConfig := &entity.Config{Key: key}
diff --git a/internal/service/config/config_service.go
b/internal/service/config/config_service.go
index 63aea221..0848d604 100644
--- a/internal/service/config/config_service.go
+++ b/internal/service/config/config_service.go
@@ -31,6 +31,7 @@ import (
type ConfigRepo interface {
GetConfigByID(ctx context.Context, id int) (c *entity.Config, err error)
GetConfigByKey(ctx context.Context, key string) (c *entity.Config, err
error)
+ GetConfigByKeyFromDB(ctx context.Context, key string) (c
*entity.Config, err error)
UpdateConfig(ctx context.Context, key, value string) (err error)
}
@@ -64,6 +65,15 @@ func (cs *ConfigService) GetStringValue(ctx context.Context,
key string) (val st
return cf.Value, nil
}
+// GetStringValueFromDB gets config string value directly from DB, bypassing
cache.
+func (cs *ConfigService) GetStringValueFromDB(ctx context.Context, key string)
(val string, err error) {
+ cf, err := cs.configRepo.GetConfigByKeyFromDB(ctx, key)
+ if err != nil {
+ return "", err
+ }
+ return cf.Value, nil
+}
+
// GetArrayStringValue get config array string value
func (cs *ConfigService) GetArrayStringValue(ctx context.Context, key string)
(val []string, err error) {
cf, err := cs.configRepo.GetConfigByKey(ctx, key)
diff --git a/internal/service/plugin_common/plugin_common_service.go
b/internal/service/plugin_common/plugin_common_service.go
index 7d39a5aa..eb46b5ac 100644
--- a/internal/service/plugin_common/plugin_common_service.go
+++ b/internal/service/plugin_common/plugin_common_service.go
@@ -144,7 +144,7 @@ func (ps *PluginCommonService) initPluginData() {
})
// init plugin status
- pluginStatus, err := ps.configService.GetStringValue(context.TODO(),
constant.PluginStatus)
+ pluginStatus, err :=
ps.configService.GetStringValueFromDB(context.TODO(), constant.PluginStatus)
if err != nil {
log.Error(err)
} else {