115 lines
3.5 KiB
Go
115 lines
3.5 KiB
Go
package sysconfig
|
|
|
|
import (
|
|
"bindbox-game/internal/pkg/logger"
|
|
"bindbox-game/internal/repository/mysql"
|
|
"bindbox-game/internal/repository/mysql/dao"
|
|
"bindbox-game/internal/repository/mysql/model"
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type Service interface {
|
|
GetByKey(ctx context.Context, key string) (*model.SystemConfigs, error)
|
|
UpsertByKey(ctx context.Context, key string, value string, remark string) (*model.SystemConfigs, error)
|
|
ModifyByID(ctx context.Context, id int64, value *string, remark *string) error
|
|
DeleteByID(ctx context.Context, id int64) error
|
|
List(ctx context.Context, page int, pageSize int, keyword string) (items []*model.SystemConfigs, total int64, err error)
|
|
}
|
|
|
|
type service struct {
|
|
logger logger.CustomLogger
|
|
readDB *dao.Query
|
|
}
|
|
|
|
func New(l logger.CustomLogger, db mysql.Repo) Service {
|
|
return &service{logger: l, readDB: dao.Use(db.GetDbR())}
|
|
}
|
|
|
|
func (s *service) GetByKey(ctx context.Context, key string) (*model.SystemConfigs, error) {
|
|
return s.readDB.SystemConfigs.WithContext(ctx).ReadDB().Where(s.readDB.SystemConfigs.ConfigKey.Eq(key)).Take()
|
|
}
|
|
|
|
func (s *service) UpsertByKey(ctx context.Context, key string, value string, remark string) (*model.SystemConfigs, error) {
|
|
q := s.readDB.SystemConfigs.WithContext(ctx)
|
|
m, err := q.Where(s.readDB.SystemConfigs.ConfigKey.Eq(key)).Take()
|
|
if err == nil && m != nil {
|
|
_, e := q.Where(s.readDB.SystemConfigs.ID.Eq(m.ID)).Updates(map[string]any{"config_value": value, "remark": remark})
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
m.ConfigValue = value
|
|
m.Remark = remark
|
|
// 同步更新缓存
|
|
if dc := GetDynamicConfig(); dc != nil {
|
|
dc.UpdateCache(key, value)
|
|
}
|
|
return m, nil
|
|
}
|
|
m = &model.SystemConfigs{ConfigKey: key, ConfigValue: value, Remark: remark}
|
|
if e := q.Create(m); e != nil {
|
|
return nil, e
|
|
}
|
|
// 同步更新缓存
|
|
if dc := GetDynamicConfig(); dc != nil {
|
|
dc.UpdateCache(key, value)
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (s *service) ModifyByID(ctx context.Context, id int64, value *string, remark *string) error {
|
|
set := map[string]any{}
|
|
if value != nil {
|
|
set["config_value"] = *value
|
|
}
|
|
if remark != nil {
|
|
set["remark"] = *remark
|
|
}
|
|
if len(set) == 0 {
|
|
return nil
|
|
}
|
|
// 先查出 Key
|
|
item, err := s.readDB.SystemConfigs.WithContext(ctx).ReadDB().Where(s.readDB.SystemConfigs.ID.Eq(id)).Take()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = s.readDB.SystemConfigs.WithContext(ctx).Where(s.readDB.SystemConfigs.ID.Eq(id)).Updates(set)
|
|
if err == nil && value != nil {
|
|
if dc := GetDynamicConfig(); dc != nil {
|
|
dc.UpdateCache(item.ConfigKey, *value)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (s *service) DeleteByID(ctx context.Context, id int64) error {
|
|
item, _ := s.readDB.SystemConfigs.WithContext(ctx).ReadDB().Where(s.readDB.SystemConfigs.ID.Eq(id)).Take()
|
|
_, err := s.readDB.SystemConfigs.WithContext(ctx).Where(s.readDB.SystemConfigs.ID.Eq(id)).Updates(map[string]any{"deleted_at": time.Now()})
|
|
if err == nil && item != nil {
|
|
if dc := GetDynamicConfig(); dc != nil {
|
|
dc.DeleteCache(item.ConfigKey)
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (s *service) List(ctx context.Context, page int, pageSize int, keyword string) (items []*model.SystemConfigs, total int64, err error) {
|
|
if page <= 0 {
|
|
page = 1
|
|
}
|
|
if pageSize <= 0 {
|
|
pageSize = 20
|
|
}
|
|
q := s.readDB.SystemConfigs.WithContext(ctx).ReadDB()
|
|
if keyword != "" {
|
|
q = q.Where(s.readDB.SystemConfigs.ConfigKey.Like("%" + keyword + "%"))
|
|
}
|
|
total, err = q.Count()
|
|
if err != nil {
|
|
return
|
|
}
|
|
items, err = q.Order(s.readDB.SystemConfigs.ID.Desc()).Offset((page - 1) * pageSize).Limit(pageSize).Find()
|
|
return
|
|
}
|