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
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)})
|
|
}
|
|
|