275 lines
7.5 KiB
Go
275 lines
7.5 KiB
Go
// Package manager ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:46 下午 2021/8/9
|
|
package manager
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/center-config/dao"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/center-config/define/model"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/center-config/define/form"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type config struct {
|
|
base
|
|
}
|
|
|
|
// CreateOrUpdateConfig 创建或更新配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:50 下午 2021/8/9
|
|
func (c *config) CreateOrUpdateConfig(dataForm *form.CreateOrUpdateConfig) error {
|
|
var (
|
|
err error
|
|
namespaceInfo *model.Namespace
|
|
configInfo *model.Config
|
|
)
|
|
|
|
if namespaceInfo, err = Namespace.GetNamespaceDetail(dataForm.NamespaceID, dataForm.Namespace); nil != err {
|
|
return errors.New("namespace is not found : " + err.Error())
|
|
}
|
|
|
|
if err = dao.Config.Detail(dao.DBInstance, &model.Config{NamespaceID: namespaceInfo.ID, Field: dataForm.Key}, configInfo, nil); nil != err {
|
|
// 没查到,创建
|
|
return c.Create(dataForm, namespaceInfo)
|
|
} else {
|
|
// 查到更新
|
|
return c.Update(dataForm, namespaceInfo, configInfo)
|
|
}
|
|
}
|
|
|
|
// Create 创建配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:10 上午 2021/8/10
|
|
func (c *config) Create(dataForm *form.CreateOrUpdateConfig, namespaceInfo *model.Namespace) error {
|
|
var (
|
|
err error
|
|
configInfo *model.Config
|
|
)
|
|
|
|
if nil == namespaceInfo {
|
|
if namespaceInfo, err = Namespace.GetNamespaceDetail(dataForm.NamespaceID, dataForm.Namespace); nil != err {
|
|
return errors.New("namespace is not found :" + err.Error())
|
|
}
|
|
}
|
|
|
|
// 创建配置
|
|
tx := dao.Config.Begin()
|
|
if nil != tx.Error {
|
|
return err
|
|
}
|
|
// 创建配置
|
|
configInfo = &model.Config{
|
|
NamespaceID: namespaceInfo.ID,
|
|
Field: dataForm.Key,
|
|
Value: dataForm.Value,
|
|
Description: dataForm.Description,
|
|
CreateUserID: dataForm.OperateUserID,
|
|
ModifyUserID: dataForm.OperateUserID,
|
|
CreateTime: time.Now().Format("2006-01-02 15:04:05"),
|
|
ModifyTime: time.Now().Format("2006-01-02 15:04:05"),
|
|
}
|
|
if err = dao.Config.CreateNewData(tx, configInfo, nil); nil != err {
|
|
_ = dao.Config.Rollback(tx)
|
|
return err
|
|
}
|
|
// 记录日志
|
|
logData := c.GetLogData(namespaceInfo.ID, configInfo.ID, dataForm.OperateUserID, model.LogTypeCreateConfig, "新建配置")
|
|
logData.AfterValue = fmt.Sprintf(`{"field":"%s", "value":"%s"}`, dataForm.Key, dataForm.Value)
|
|
if err = dao.Log.CreateNewData(tx, logData, nil); nil != err {
|
|
_ = dao.Config.Rollback(tx)
|
|
return err
|
|
}
|
|
if err = dao.Config.Commit(tx); nil != err {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Update 更新配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:34 上午 2021/8/10
|
|
func (c *config) Update(dataForm *form.CreateOrUpdateConfig, namespaceInfo *model.Namespace, configInfo *model.Config) error {
|
|
var (
|
|
err error
|
|
)
|
|
|
|
if nil == namespaceInfo {
|
|
if namespaceInfo, err = Namespace.GetNamespaceDetail(dataForm.NamespaceID, dataForm.Namespace); nil != err {
|
|
return errors.New("namespace is not found :" + err.Error())
|
|
}
|
|
}
|
|
|
|
if nil == configInfo {
|
|
if configInfo, err = c.GetConfigInfo(namespaceInfo.ID, dataForm.Key); nil != err {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// 更新配置
|
|
tx := dao.Config.Begin()
|
|
if nil != tx.Error {
|
|
return err
|
|
}
|
|
|
|
if err = dao.Config.UpdateData(tx, &model.Config{Value: dataForm.Value}, &model.Config{NamespaceID: namespaceInfo.ID, Field: dataForm.Key, Value: configInfo.Value}, nil); nil != err {
|
|
_ = dao.Config.Rollback(tx)
|
|
return err
|
|
}
|
|
// 记录日志
|
|
logData := c.GetLogData(namespaceInfo.ID, configInfo.ID, dataForm.OperateUserID, model.LogTypeUpdateConfig, "更新配置 : "+dataForm.Description)
|
|
logData.BeforeValue = fmt.Sprintf(`{"field":"%s", "value":"%s"}`, dataForm.Key, configInfo.Value)
|
|
logData.AfterValue = fmt.Sprintf(`{"field":"%s", "value":"%s"}`, dataForm.Key, dataForm.Value)
|
|
if err = dao.Log.CreateNewData(tx, logData, nil); nil != err {
|
|
_ = dao.Config.Rollback(tx)
|
|
return err
|
|
}
|
|
if err = dao.Config.Commit(tx); nil != err {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Delete 删除配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:16 下午 2021/12/1
|
|
func (c *config) Delete(dataForm *form.DeleteConfig) error {
|
|
var (
|
|
cfgInfo *model.Config
|
|
err error
|
|
)
|
|
// 读取key的配置
|
|
if cfgInfo, err = c.GetConfigInfo(dataForm.NamespaceID, dataForm.Key); nil != err {
|
|
return errors.New("要删除的key查询失败 : " + err.Error())
|
|
}
|
|
if err = dao.Config.Delete(dao.DBInstance, "config", cfgInfo.ID, model.Config{}); nil != err {
|
|
return err
|
|
}
|
|
byteData, _ := json.Marshal(cfgInfo)
|
|
logData := c.GetLogData(cfgInfo.NamespaceID, cfgInfo.ID, dataForm.OperateUserID, model.LogTypeDeleteConfig, "删除配置-"+dataForm.Description)
|
|
logData.BeforeValue = string(byteData)
|
|
_ = dao.Log.CreateNewData(dao.DBInstance, logData, &dao.Option{DBTable: "log"})
|
|
return nil
|
|
}
|
|
|
|
// ValidateCreateOrUpdateConfigForm ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:49 下午 2021/8/9
|
|
func (c *config) ValidateCreateOrUpdateConfigForm(ctx *gin.Context) (*form.CreateOrUpdateConfig, error) {
|
|
var (
|
|
dataForm form.CreateOrUpdateConfig
|
|
err error
|
|
)
|
|
|
|
if err = c.ParsePostForm(ctx, &dataForm); nil != err {
|
|
return nil, err
|
|
}
|
|
|
|
if dataForm.NamespaceID <= 0 && len(dataForm.Namespace) == 0 {
|
|
return nil, errors.New("namespace_id or namespace is required")
|
|
}
|
|
|
|
if len(dataForm.Key) == 0 {
|
|
return nil, errors.New("key is required")
|
|
}
|
|
|
|
if len(dataForm.OperateUserID) == 0 {
|
|
return nil, errors.New("operate_user_id is required")
|
|
}
|
|
|
|
return &dataForm, nil
|
|
}
|
|
|
|
// ValidateDeleteConfigForm 删除配置表单
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:12 下午 2021/12/1
|
|
func (c *config) ValidateDeleteConfigForm(ctx *gin.Context) (*form.DeleteConfig, error) {
|
|
var (
|
|
dataForm form.DeleteConfig
|
|
err error
|
|
)
|
|
|
|
if err = c.ParsePostForm(ctx, &dataForm); nil != err {
|
|
return nil, err
|
|
}
|
|
|
|
if dataForm.NamespaceID == 0 {
|
|
dataForm.NamespaceID = Namespace.GetNamespaceIDByNamespace(dataForm.Namespace)
|
|
}
|
|
if dataForm.NamespaceID == 0 {
|
|
return nil, errors.New("namespace or namespace_id must exist")
|
|
}
|
|
if len(dataForm.Key) == 0 {
|
|
return nil, errors.New("delete is not allowed empty")
|
|
}
|
|
return &dataForm, nil
|
|
}
|
|
|
|
// GetConfigInfo 读取配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:59 上午 2021/8/10
|
|
func (c *config) GetConfigInfo(namespaceID int64, configKey string) (*model.Config, error) {
|
|
var (
|
|
err error
|
|
configInfo model.Config
|
|
)
|
|
if err = dao.Config.Detail(dao.DBInstance, &model.Config{NamespaceID: namespaceID, Field: configKey}, &configInfo, nil); nil != err {
|
|
return nil, errors.New("config is not found :" + err.Error())
|
|
}
|
|
return &configInfo, err
|
|
}
|
|
|
|
// GetAllConfig 获取全部配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 9:57 下午 2021/8/10
|
|
func (c *config) GetAllConfig() ([]*model.Config, error) {
|
|
var (
|
|
list []*model.Config
|
|
err error
|
|
)
|
|
if err = dao.Config.Select(dao.DBInstance, &model.Config{}, &list, nil); nil != err {
|
|
return make([]*model.Config, 0), err
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
// GetNamespaceConfig 获取命名空间的配置
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:45 上午 2021/8/11
|
|
func (c *config) GetNamespaceConfig(namespaceID int64) ([]*model.Config, error) {
|
|
var (
|
|
list []*model.Config
|
|
err error
|
|
)
|
|
if err = dao.Config.Select(dao.DBInstance, &model.Config{NamespaceID: namespaceID}, &list, nil); nil != err {
|
|
return make([]*model.Config, 0), err
|
|
}
|
|
return list, nil
|
|
}
|