邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

90 lines
2.8 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
return m, nil
}
m = &model.SystemConfigs{ConfigKey: key, ConfigValue: value, Remark: remark}
if e := q.Create(m); e != nil {
return nil, e
}
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
}
_, err := s.readDB.SystemConfigs.WithContext(ctx).Where(s.readDB.SystemConfigs.ID.Eq(id)).Updates(set)
return err
}
func (s *service) DeleteByID(ctx context.Context, id int64) error {
_, err := s.readDB.SystemConfigs.WithContext(ctx).Where(s.readDB.SystemConfigs.ID.Eq(id)).Updates(map[string]any{"deleted_at": time.Now()})
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
}