Files
qitongxue-api/internal/logic/setting_admin.go
2026-09-30 17:01:18 +08:00

83 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package logic
import (
"context"
"strings"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
adminv1 "tool-api/api/admin/v1"
"tool-api/internal/consts"
)
// ============================================================================
// 管理端系统配置(迭代-2026-09-29)
//
// 走 settings 表(约定 S9:配置一律走 settings 表,不写 config.yaml)。
// 只开放白名单键:管理端可读可写的键集中在这里登记,避免把 settings 全表暴露。
// ============================================================================
// adminSettingWhitelist 管理端可读写的配置键白名单
var adminSettingWhitelist = []struct {
Key string
Remark string
// Normalize 保存前的归一化(可为 nil)
Normalize func(string) string
}{
{
Key: consts.SettingSiteBaseUrl,
Remark: "图片等静态资源的对外拼接前缀(如 https://api.example.com),留空 = 按请求域名动态拼接",
Normalize: func(v string) string {
return strings.TrimRight(strings.TrimSpace(v), "/")
},
},
{
Key: consts.SettingHomeFeatureCovers,
Remark: "首页便捷功能卡背景图,JSON:{\"note\":\"/static/...\",\"event\":\"...\"}(key 对齐小程序 features.ts)",
Normalize: func(v string) string {
return strings.TrimSpace(v)
},
},
}
// AdminSettingGet 读取白名单配置项(含当前值与说明)
func AdminSettingGet(ctx context.Context) (*adminv1.AdminSettingGetRes, error) {
res := &adminv1.AdminSettingGetRes{Items: make([]adminv1.AdminSettingItem, 0, len(adminSettingWhitelist))}
for _, def := range adminSettingWhitelist {
res.Items = append(res.Items, adminv1.AdminSettingItem{
Key: def.Key,
Value: SettingValue(ctx, def.Key),
Remark: def.Remark,
})
}
return res, nil
}
// AdminSettingSave 保存一项配置(key 必须在白名单内;保存立即生效,SettingValue 缓存同步失效)
func AdminSettingSave(ctx context.Context, key, value string) (*adminv1.AdminSettingSaveRes, error) {
for _, def := range adminSettingWhitelist {
if def.Key != key {
continue
}
v := value
if def.Normalize != nil {
v = def.Normalize(v)
}
before := SettingValue(ctx, key)
if err := SettingSave(ctx, key, v, def.Remark); err != nil {
return nil, err
}
WriteAudit(ctx, AuditEntry{
Action: "setting.save",
TargetType: "setting",
TargetId: key,
Before: g.Map{"v": before},
After: g.Map{"v": v},
Result: consts.AuditResultSuccess,
})
return &adminv1.AdminSettingSaveRes{}, nil
}
return nil, gerror.New("不支持的配置项")
}