You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

155 lines
4.8 KiB

package console
import (
"strings"
"yunyan/comm"
"yunyan/pb"
"github.com/gin-gonic/gin"
)
// ============================ 应用环境配置 (appcfg) ============================
//
// 「应用环境配置」页(admin appconfig.vue)的后端:读写**选中部署应用业务库**里的 config 表
// (comm.TableAppConfig / pb.DBAppConfigItem)——即应用自有的 key/value 配置(音乐、OSS 等)。
//
// 结构与「全局环境配置」(global_config, 存 console 公共库、按区域分组)一致,但去掉区域维度:
// 应用 config 不分区域,且落在各应用自己的业务库里,故按部署 app_id 从 registry 动态取连接
// (与 modulecfg / analyze / 重置设备码同机制),不经 console 公共库。
//
// 无加密字段(与 global_config 一致,明文 key/value)。
// appCfgList 列出某部署业务库 config 表的全部配置项(按 group 分组由前端做)。
func (this *serverComp) appCfgList(c *gin.Context) {
var req struct {
AppId uint32 `json:"app_id"`
}
_ = c.ShouldBindJSON(&req)
if req.AppId == 0 {
writeErr(c, pb.ErrorCode_ReqParameterError, "app_id 必填")
return
}
db, err := this.module.registry.getServiceDB(req.AppId)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, "连接应用业务库失败: "+err.Error())
return
}
if err := db.CreateTable(comm.TableAppConfig, &pb.DBAppConfigItem{}); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
items := make([]*pb.DBAppConfigItem, 0)
if err := db.Find(comm.TableAppConfig, &items, ""); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
writeOK(c, gin.H{"items": items})
}
// appCfgAdd 在某部署业务库新增一条 config(id 由库自增回填)。
func (this *serverComp) appCfgAdd(c *gin.Context) {
var req struct {
AppId uint32 `json:"app_id"`
Group string `json:"group"`
Key string `json:"key"`
Value string `json:"value"`
Description string `json:"description"`
}
if err := c.ShouldBindJSON(&req); err != nil {
writeErr(c, pb.ErrorCode_ReqParameterError, err.Error())
return
}
if req.AppId == 0 {
writeErr(c, pb.ErrorCode_ReqParameterError, "app_id 必填")
return
}
if strings.TrimSpace(req.Key) == "" {
writeErr(c, pb.ErrorCode_ReqParameterError, "键(key) 必填")
return
}
db, err := this.module.registry.getServiceDB(req.AppId)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, "连接应用业务库失败: "+err.Error())
return
}
if err := db.CreateTable(comm.TableAppConfig, &pb.DBAppConfigItem{}); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
m := &pb.DBAppConfigItem{
Group: strings.TrimSpace(req.Group),
Key: strings.TrimSpace(req.Key),
Value: req.Value,
Description: strings.TrimSpace(req.Description),
}
if err := db.Insert(comm.TableAppConfig, m); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
writeOK(c, m)
}
// appCfgUpdate 更新某部署业务库的一条 config(按 id)。
func (this *serverComp) appCfgUpdate(c *gin.Context) {
var req struct {
AppId uint32 `json:"app_id"`
Id uint64 `json:"id"`
Group string `json:"group"`
Key string `json:"key"`
Value string `json:"value"`
Description string `json:"description"`
}
if err := c.ShouldBindJSON(&req); err != nil {
writeErr(c, pb.ErrorCode_ReqParameterError, err.Error())
return
}
if req.AppId == 0 || req.Id == 0 {
writeErr(c, pb.ErrorCode_ReqParameterError, "app_id 与 id 必填")
return
}
db, err := this.module.registry.getServiceDB(req.AppId)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, "连接应用业务库失败: "+err.Error())
return
}
m := &pb.DBAppConfigItem{
Id: req.Id,
Group: strings.TrimSpace(req.Group),
Key: strings.TrimSpace(req.Key),
Value: req.Value,
Description: strings.TrimSpace(req.Description),
}
if err := db.Save(comm.TableAppConfig, m); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
writeOK(c, m)
}
// appCfgDel 按 id 批量删除某部署业务库的 config。
func (this *serverComp) appCfgDel(c *gin.Context) {
var req struct {
AppId uint32 `json:"app_id"`
Ids []uint64 `json:"ids"`
}
_ = c.ShouldBindJSON(&req)
if req.AppId == 0 {
writeErr(c, pb.ErrorCode_ReqParameterError, "app_id 必填")
return
}
if len(req.Ids) == 0 {
writeErr(c, pb.ErrorCode_ReqParameterError, "ids 必填")
return
}
db, err := this.module.registry.getServiceDB(req.AppId)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, "连接应用业务库失败: "+err.Error())
return
}
if err := db.Delete(comm.TableAppConfig, "id IN ?", req.Ids); err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
writeOK(c, gin.H{"deleted": len(req.Ids)})
}