204 lines
5.6 KiB
Go
204 lines
5.6 KiB
Go
|
// Package manager ...
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 9:39 下午 2021/8/8
|
||
|
package manager
|
||
|
|
||
|
import (
|
||
|
"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 namespace struct {
|
||
|
base
|
||
|
}
|
||
|
|
||
|
// Create 创建命名空间
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 2:18 下午 2021/8/9
|
||
|
func (n *namespace) Create(createForm *form.CreateNamespace) error {
|
||
|
var (
|
||
|
err error
|
||
|
namespaceInfo *model.Namespace
|
||
|
)
|
||
|
|
||
|
// 查询namespace是否已经存在
|
||
|
if _, err = dao.Namespace.GetDetailByNamespace(createForm.Namespace); nil == err {
|
||
|
return errors.New("namespace " + createForm.Namespace + " is already exist!")
|
||
|
}
|
||
|
|
||
|
// 写库
|
||
|
tx := dao.Namespace.Begin()
|
||
|
if nil != tx.Error {
|
||
|
return tx.Error
|
||
|
}
|
||
|
|
||
|
// 创建命名空间
|
||
|
namespaceInfo = &model.Namespace{
|
||
|
Namespace: createForm.Namespace,
|
||
|
Name: createForm.Name,
|
||
|
Description: createForm.Description,
|
||
|
Status: model.NamespaceStatusWaitActive,
|
||
|
CreateUserID: createForm.CreateUserID,
|
||
|
ModifyUserID: createForm.CreateUserID,
|
||
|
CreateTime: time.Now().Format("2006-01-02 15:04:05"),
|
||
|
ModifyTime: time.Now().Format("2006-01-02 15:04:05"),
|
||
|
}
|
||
|
if err = dao.Namespace.CreateNewData(tx, namespaceInfo, &dao.Option{DBTable: "namespace"}); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// 记录日志
|
||
|
logData := n.GetLogData(namespaceInfo.ID, 0, namespaceInfo.CreateUserID, model.LogTypeCreateNamespace, "新建命名空间")
|
||
|
logData.AfterValue = namespaceInfo.Namespace
|
||
|
if err = dao.Log.CreateNewData(tx, logData, &dao.Option{DBTable: "log"}); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if err = dao.Namespace.Commit(tx); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// ValidateCreateForm 创建命名空间表单校验与预处理
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 2:36 下午 2021/8/9
|
||
|
func (n *namespace) ValidateCreateForm(ctx *gin.Context) (*form.CreateNamespace, error) {
|
||
|
var (
|
||
|
err error
|
||
|
createForm form.CreateNamespace
|
||
|
)
|
||
|
if err = n.ParsePostForm(ctx, &createForm); nil != err {
|
||
|
return nil, err
|
||
|
}
|
||
|
// 表单校验
|
||
|
if len(createForm.Namespace) == 0 {
|
||
|
return nil, errors.New("namespace field is required")
|
||
|
}
|
||
|
if len(createForm.Name) == 0 {
|
||
|
return nil, errors.New("name field is required")
|
||
|
}
|
||
|
if len(createForm.Description) == 0 {
|
||
|
createForm.Description = createForm.Name
|
||
|
}
|
||
|
if len(createForm.CreateUserID) == 0 {
|
||
|
return nil, errors.New("create_user_id field is required")
|
||
|
}
|
||
|
// 表单校验 end
|
||
|
return &createForm, nil
|
||
|
}
|
||
|
|
||
|
// Active 激活命名空间
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 9:14 下午 2021/8/9
|
||
|
func (n *namespace) Active(activeForm *form.ActiveNamespace) error {
|
||
|
if activeForm.NamespaceID <= 0 {
|
||
|
activeForm.NamespaceID = n.GetNamespaceIDByNamespace(activeForm.Namespace)
|
||
|
}
|
||
|
var err error
|
||
|
tx := dao.Namespace.Begin()
|
||
|
if nil != tx.Error {
|
||
|
return tx.Error
|
||
|
}
|
||
|
if err = dao.Namespace.UpdateData(tx, &model.Namespace{Status: model.NamespaceStatusNormal}, map[string]interface{}{"id": activeForm.NamespaceID, "status": model.NamespaceStatusWaitActive}, &dao.Option{Limit: 1, DBTable: "namespace"}); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
logData := n.GetLogData(activeForm.NamespaceID, 0, activeForm.UpdateUserID, model.LogTypeActiveNamespace, "激活命名空间")
|
||
|
logData.BeforeValue = fmt.Sprintf("%v", model.NamespaceStatusWaitActive)
|
||
|
logData.AfterValue = fmt.Sprintf("%v", model.NamespaceStatusNormal)
|
||
|
if err = dao.Log.CreateNewData(tx, logData, nil); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if err = dao.Namespace.Commit(tx); nil != err {
|
||
|
_ = dao.Namespace.Rollback(tx)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// ValidateActiveForm 验证激活命名空间表单
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 9:14 下午 2021/8/9
|
||
|
func (n *namespace) ValidateActiveForm(ctx *gin.Context) (*form.ActiveNamespace, error) {
|
||
|
var (
|
||
|
err error
|
||
|
updateForm form.ActiveNamespace
|
||
|
)
|
||
|
if err = n.ParsePostForm(ctx, &updateForm); nil != err {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if updateForm.NamespaceID <= 0 {
|
||
|
if namespaceDetail, err := dao.Namespace.GetDetailByNamespace(updateForm.Namespace); nil == err {
|
||
|
updateForm.NamespaceID = namespaceDetail.ID
|
||
|
}
|
||
|
}
|
||
|
if updateForm.NamespaceID <= 0 {
|
||
|
return nil, errors.New("namespace_id is required")
|
||
|
}
|
||
|
|
||
|
if len(updateForm.UpdateUserID) == 0 {
|
||
|
return nil, errors.New("update_user_id is required")
|
||
|
}
|
||
|
return &updateForm, nil
|
||
|
}
|
||
|
|
||
|
// GetNamespaceDetail 获取namespace详情
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 12:07 上午 2021/8/10
|
||
|
func (n *namespace) GetNamespaceDetail(namespaceID int64, namespaceName string) (*model.Namespace, error) {
|
||
|
var (
|
||
|
namespaceInfo model.Namespace
|
||
|
err error
|
||
|
)
|
||
|
// 查询namespace
|
||
|
if namespaceID > 0 {
|
||
|
err = dao.Namespace.Detail(dao.DBInstance, &model.Namespace{ID: namespaceID}, &namespaceInfo, nil)
|
||
|
} else {
|
||
|
err = dao.Namespace.Detail(dao.DBInstance, &model.Namespace{Namespace: namespaceName}, &namespaceInfo, nil)
|
||
|
}
|
||
|
return &namespaceInfo, err
|
||
|
}
|
||
|
|
||
|
// GetAllNormalNamespace 获取
|
||
|
//
|
||
|
// Author : go_developer@163.com<白茶清欢>
|
||
|
//
|
||
|
// Date : 9:51 下午 2021/8/10
|
||
|
func (n *namespace) GetAllNamespaceByStatus(status int) ([]*model.Namespace, error) {
|
||
|
var (
|
||
|
list []*model.Namespace
|
||
|
err error
|
||
|
)
|
||
|
if err = dao.Namespace.Select(dao.DBInstance, &model.Namespace{Status: status}, &list, nil); nil != err {
|
||
|
return make([]*model.Namespace, 0), err
|
||
|
}
|
||
|
return list, nil
|
||
|
}
|