refactor🎨 链式调用改造

This commit is contained in:
zhangwenjian
2021-05-16 16:17:37 +08:00
parent 9fdde1a13b
commit 33275573f9
5 changed files with 158 additions and 111 deletions
+32 -67
View File
@@ -95,7 +95,6 @@ func (e SysMenu) GetSysMenu(c *gin.Context) {
e.OK(object, "查看成功")
}
// InsertSysMenu 创建菜单
// @Summary 创建菜单
// @Description 获取JSON
@@ -114,41 +113,34 @@ func (e SysMenu) GetSysMenu(c *gin.Context) {
// @Security Bearer
func (e SysMenu) InsertSysMenu(c *gin.Context) {
control := new(dto.SysMenuControl)
e.Context = c
log := e.GetLogger()
db, err := e.GetOrm()
err := e.MakeContext(c).
MakeLogger().
MakeOrm().
Errors
if err != nil {
log.Error(err)
e.Error(http.StatusInternalServerError, err, err.Error())
e.Logger.Error(err)
return
}
//新增操作
err = control.Bind(c)
// 绑定数据
err = e.Bind(control)
if err != nil {
e.Error(http.StatusUnprocessableEntity, err, "参数验证失败")
return
}
object, err := control.Generate()
if err != nil {
e.Error(http.StatusInternalServerError, err, "模型生成失败")
return
}
// 设置创建人
object.SetCreateBy(user.GetUserId(c))
control.SetCreateBy(user.GetUserId(c))
serviceSysMenu := service.SysMenu{}
serviceSysMenu.Orm = db
serviceSysMenu.Log = log
err = serviceSysMenu.InsertSysMenu(object)
err = serviceSysMenu.MakeLog(e.Logger).MakeOrm(e.Orm).InsertSysMenu(control).Error
if err != nil {
log.Error(err)
e.Logger.Error(err)
e.Error(http.StatusInternalServerError, err, "创建失败")
return
}
e.OK(object.GetId(), "创建成功")
e.OK(control.GetId(), "创建成功")
}
// UpdateSysMenu 修改菜单
@@ -165,40 +157,37 @@ func (e SysMenu) InsertSysMenu(c *gin.Context) {
// @Security Bearer
func (e SysMenu) UpdateSysMenu(c *gin.Context) {
control := new(dto.SysMenuControl)
e.Context = c
log := e.GetLogger()
db, err := e.GetOrm()
err := e.MakeContext(c).
MakeLogger().
MakeOrm().
Errors
if err != nil {
log.Error(err)
e.Logger.Error(err)
return
}
//更新操作
err = control.Bind(c)
// 绑定数据
err = e.Bind(control)
if err != nil {
e.Error(http.StatusUnprocessableEntity, err, "参数验证失败")
return
}
object, err := control.Generate()
if err != nil {
e.Error(http.StatusInternalServerError, err, "模型生成失败")
return
}
object.SetUpdateBy(user.GetUserId(c))
control.SetUpdateBy(user.GetUserId(c))
serviceSysMenu := service.SysMenu{}
serviceSysMenu.Orm = db
serviceSysMenu.Log = log
err = serviceSysMenu.UpdateSysMenu(object)
err = serviceSysMenu.
MakeOrm(e.Orm).
MakeLog(e.Logger).
UpdateSysMenu(control).Error
if err != nil {
log.Error(err)
e.Logger.Error(err)
return
}
e.OK(object.GetId(), "更新成功")
e.OK(control.GetId(), "更新成功")
}
// DeleteSysMenu 删除菜单
// @Summary 删除菜单
// @Description 删除数据
// @Tags 菜单
@@ -238,6 +227,7 @@ func (e SysMenu) DeleteSysMenu(c *gin.Context) {
e.OK(control.GetId(), "删除成功")
}
// GetMenuRole 根据角色名称获取菜单列表数据(左菜单使用)
// @Summary 根据角色名称获取菜单列表数据(左菜单使用)
// @Description 获取JSON
// @Tags 菜单
@@ -268,6 +258,7 @@ func (e SysMenu) GetMenuRole(c *gin.Context) {
e.OK(result, "")
}
// GetMenuIDS 获取角色对应的菜单id数组
// @Summary 获取角色对应的菜单id数组
// @Description 获取JSON
// @Tags 菜单
@@ -296,33 +287,7 @@ func (e SysMenu) GetMenuIDS(c *gin.Context) {
e.OK(result, "")
}
//// GetMenuTreeRoleselect 角色修改中的菜单列表
//func (e SysMenu) GetMenuTreeRoleselect(c *gin.Context) {
// var Menu models.Menu
// var SysRole models.SysRole
//
// id, err := tools.StringToInt(c.Param("roleId"))
// SysRole.RoleId = id
// //var r *models.SysRole
// r, err := SysRole.Get()
//
// var result *[]models.MenuLable
// menuIds := make([]int, 0)
// if r.RoleKey != "admin" {
// result, err = Menu.SetMenuLabel()
// tools.HasError(err, "抱歉未找到相关信息", -1)
// if id != 0 {
// menuIds, err = SysRole.GetRoleMeunId()
// tools.HasError(err, "抱歉未找到相关信息", -1)
// }
// }
// app.Custum(c, gin.H{
// "code": 200,
// "menus": result,
// "checkedKeys": menuIds,
// })
//}
// GetMenuTreeSelect 获取菜单树
// @Summary 获取菜单树
// @Description 获取JSON
// @Tags 菜单
+35 -22
View File
@@ -2,11 +2,11 @@ package dto
import (
"encoding/json"
"go-admin/app/admin/models"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/go-admin-team/go-admin-core/sdk/api"
"go-admin/app/admin/models"
common "go-admin/common/models"
"go-admin/common/dto"
)
@@ -58,6 +58,15 @@ type SysMenuControl struct {
Sort int `form:"sort" comment:"排序"` //排序
Visible string `form:"visible" comment:"是否显示"` //是否显示
IsFrame string `form:"isFrame" comment:"是否frame"` //是否frame
common.ControlBy
}
func (s *SysMenuControl) SetCreateBy(id int) {
s.CreateBy = id
}
func (s *SysMenuControl) SetUpdateBy(id int) {
s.UpdateBy = id
}
// Bind 映射上下文中的结构体数据
@@ -82,26 +91,30 @@ func (s *SysMenuControl) Bind(ctx *gin.Context) error {
}
// Generate 结构体数据转化 从 Control 至 model 对应的模型
func (s *SysMenuControl) Generate() (*models.SysMenu, error) {
return &models.SysMenu{
MenuId: s.MenuId,
MenuName: s.MenuName,
Title: s.Title,
Icon: s.Icon,
Path: s.Path,
Paths: s.Paths,
MenuType: s.MenuType,
Action: s.Action,
SysApi: s.SysApi,
Permission: s.Permission,
ParentId: s.ParentId,
NoCache: s.NoCache,
Breadcrumb: s.Breadcrumb,
Component: s.Component,
Sort: s.Sort,
Visible: s.Visible,
IsFrame: s.IsFrame,
}, nil
func (s *SysMenuControl) Generate(model *models.SysMenu) {
model.MenuId = s.MenuId
model.MenuName = s.MenuName
model.Title = s.Title
model.Icon = s.Icon
model.Path = s.Path
model.Paths = s.Paths
model.MenuType = s.MenuType
model.Action = s.Action
model.SysApi = s.SysApi
model.Permission = s.Permission
model.ParentId = s.ParentId
model.NoCache = s.NoCache
model.Breadcrumb = s.Breadcrumb
model.Component = s.Component
model.Sort = s.Sort
model.Visible = s.Visible
model.IsFrame = s.IsFrame
if s.CreateBy != 0 {
model.CreateBy = s.CreateBy
}
if s.UpdateBy != 0 {
model.UpdateBy = s.UpdateBy
}
}
// GetId 获取数据对应的ID
+31 -14
View File
@@ -2,18 +2,33 @@ package service
import (
"errors"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"gorm.io/gorm"
"go-admin/app/admin/models"
"go-admin/app/admin/service/dto"
cDto "go-admin/common/dto"
"go-admin/common/service"
"gorm.io/gorm"
)
type SysMenu struct {
service.Service
}
// MakeOrm 设置ORM
func (e *SysMenu) MakeOrm(orm *gorm.DB) *SysMenu {
e.Orm = orm
return e
}
// MakeLog 设置Log
func (e *SysMenu) MakeLog(l *logger.Logger) *SysMenu {
e.Log = l
return e
}
// GetSysMenuPage 获取SysMenu列表
func (e *SysMenu) GetSysMenuPage(c *dto.SysMenuSearch) (*[]models.SysMenu, error) {
var m = make([]models.SysMenu, 0)
@@ -73,17 +88,16 @@ func (e *SysMenu) GetSysMenu(d *dto.SysMenuById, model *models.SysMenu) error {
}
// InsertSysMenu 创建SysMenu对象
func (e *SysMenu) InsertSysMenu(model *models.SysMenu) error {
func (e *SysMenu) InsertSysMenu(c *dto.SysMenuControl) *SysMenu {
var err error
var data models.SysMenu
err = e.Orm.Model(&data).
Create(model).Error
c.Generate(&data)
err = e.Orm.Create(&data).Error
if err != nil {
e.Log.Errorf("db error:%s", err)
return err
_ = e.AddError(err)
}
return nil
return e
}
func (e *SysMenu) initPaths(menu *models.SysMenu) error {
@@ -105,19 +119,22 @@ func (e *SysMenu) initPaths(menu *models.SysMenu) error {
}
// UpdateSysMenu 修改SysMenu对象
func (e *SysMenu) UpdateSysMenu(c *models.SysMenu) error {
func (e *SysMenu) UpdateSysMenu(c *dto.SysMenuControl) *SysMenu {
var err error
db := e.Orm.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(c)
model := models.SysMenu{}
e.Orm.First(&model, c.GetId())
c.Generate(&model)
db := e.Orm.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model)
if db.Error != nil {
e.Log.Errorf("db error:%s", err)
return err
_ = e.AddError(err)
return e
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
e.AddError(errors.New("无权更新该数据"))
return e
}
return nil
return e
}
// RemoveSysMenu 删除SysMenu
+44 -3
View File
@@ -1,12 +1,13 @@
package apis
import (
"errors"
"fmt"
"github.com/go-admin-team/go-admin-core/sdk/api"
"github.com/gin-gonic/gin/binding"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/go-admin-team/go-admin-core/sdk/api"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"github.com/go-admin-team/go-admin-core/sdk/pkg/response"
@@ -16,13 +17,26 @@ import (
type Api struct {
Context *gin.Context
Logger *logger.Logger
Orm *gorm.DB
Errors error
}
func (e *Api) AddError(err error) error {
if e.Errors == nil {
e.Errors = err
} else if err != nil {
e.Logger.Error(err)
e.Errors = fmt.Errorf("%v; %w", e.Error, err)
}
return e.Errors
}
// MakeContext 设置http上下文
func (e *Api) MakeContext(c *gin.Context) {
func (e *Api) MakeContext(c *gin.Context) *Api {
fmt.Println(&c)
e.Context = c
fmt.Println(&e.Context)
return e
}
// GetLogger 获取上下文提供的日志
@@ -32,6 +46,9 @@ func (e Api) GetLogger() *logger.Logger {
func (e Api) Bind(d interface{}, bindings ...binding.Binding) error {
var err error
if len(bindings) == 0 {
bindings = append(bindings, binding.JSON, nil)
}
for i := range bindings {
switch bindings[i] {
case binding.JSON:
@@ -74,6 +91,30 @@ func (e Api) GetOrm() (*gorm.DB, error) {
return db, nil
}
// MakeLogger 设置上下文提供的日志
func (e *Api) MakeLogger() *Api {
e.Logger = api.GetRequestLogger(e.Context)
return e
}
// MakeOrm 设置Orm DB
func (e *Api) MakeOrm() *Api {
var err error
if e.Logger == nil {
err = errors.New("at MakeOrm logger is nil")
//e.Logger.Error(http.StatusInternalServerError, err, "at MakeOrm logger is nil")
_ = e.AddError(err)
return e
}
db, err := pkg.GetOrm(e.Context)
if err != nil {
e.Logger.Error(http.StatusInternalServerError, err, "数据库连接获取失败")
_ = e.AddError(err)
}
e.Orm = db
return e
}
// Error 通常错误数据处理
func (e Api) Error(code int, err error, msg string) {
response.Error(e.Context, code, err, msg)
+11
View File
@@ -1,6 +1,7 @@
package service
import (
"fmt"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"gorm.io/gorm"
)
@@ -10,4 +11,14 @@ type Service struct {
Msg string
MsgID string
Log *logger.Logger
Error error
}
func (db *Service) AddError(err error) error {
if db.Error == nil {
db.Error = err
} else if err != nil {
db.Error = fmt.Errorf("%v; %w", db.Error, err)
}
return db.Error
}