feature: 调整自动化代码菜单和api注册逻辑

This commit is contained in:
pixelMax(奇淼
2024-07-25 16:43:11 +08:00
parent 48f3bdc80c
commit c973c0cce5
2 changed files with 47 additions and 45 deletions

View File

@@ -34,45 +34,6 @@ func (s *autoCodeTemplate) Create(ctx context.Context, info request.AutoCode) er
return errors.New("已经创建过此数据结构,请勿重复创建!")
}
// 自动创建api
if info.AutoCreateApiToSql {
apis := info.Apis()
err := global.GVA_DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
for _, v := range apis {
var api model.SysApi
err := tx.Where("path = ? AND method = ?", v.Path, v.Method).First(&api).Error
if err == nil {
return errors.New("存在相同的API请关闭自动创建API功能")
}
if errors.Is(err, gorm.ErrRecordNotFound) {
if err = tx.Create(&v).Error; err != nil { // 遇到错误时回滚事务
return err
}
history.ApiIDs = append(history.ApiIDs, v.ID)
}
}
return nil
})
if err != nil {
return err
}
}
// 自动创建menu
if info.AutoCreateMenuToSql {
var entity model.SysBaseMenu
err := global.GVA_DB.WithContext(ctx).First(&entity, "name = ?", info.Abbreviation).Error
if err == nil {
return errors.New("存在相同的菜单路由,请关闭自动创建菜单功能")
}
entity = info.Menu(autoPkg.Template)
err = global.GVA_DB.WithContext(ctx).Create(&entity).Error
if err != nil {
return errors.Wrap(err, "创建菜单失败!")
}
history.MenuID = entity.ID
}
generate, templates, injections, err := s.generate(ctx, info, autoPkg)
if err != nil {
return err
@@ -88,6 +49,49 @@ func (s *autoCodeTemplate) Create(ctx context.Context, info request.AutoCode) er
}
}
// 自动创建api
if info.AutoCreateApiToSql {
apis := info.Apis()
err := global.GVA_DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
for _, v := range apis {
var api model.SysApi
var id uint
err := tx.Where("path = ? AND method = ?", v.Path, v.Method).First(&api).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
if err = tx.Create(&v).Error; err != nil { // 遇到错误时回滚事务
return err
}
id = v.ID
} else {
id = api.ID
}
history.ApiIDs = append(history.ApiIDs, id)
}
return nil
})
if err != nil {
return err
}
}
// 自动创建menu
if info.AutoCreateMenuToSql {
var entity model.SysBaseMenu
var id uint
err := global.GVA_DB.WithContext(ctx).First(&entity, "name = ?", info.Abbreviation).Error
if err == nil {
id = entity.ID
} else {
entity = info.Menu(autoPkg.Template)
err = global.GVA_DB.WithContext(ctx).Create(&entity).Error
id = entity.ID
if err != nil {
return errors.Wrap(err, "创建菜单失败!")
}
}
history.MenuID = id
}
// 创建历史记录
history.Templates = templates
history.Injections = make(map[string]string, len(injections))