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
+33 -68
View File
@@ -95,7 +95,6 @@ func (e SysMenu) GetSysMenu(c *gin.Context) {
e.OK(object, "查看成功") e.OK(object, "查看成功")
} }
// InsertSysMenu 创建菜单 // InsertSysMenu 创建菜单
// @Summary 创建菜单 // @Summary 创建菜单
// @Description 获取JSON // @Description 获取JSON
@@ -114,41 +113,34 @@ func (e SysMenu) GetSysMenu(c *gin.Context) {
// @Security Bearer // @Security Bearer
func (e SysMenu) InsertSysMenu(c *gin.Context) { func (e SysMenu) InsertSysMenu(c *gin.Context) {
control := new(dto.SysMenuControl) control := new(dto.SysMenuControl)
err := e.MakeContext(c).
e.Context = c MakeLogger().
log := e.GetLogger() MakeOrm().
Errors
db, err := e.GetOrm()
if err != nil { if err != nil {
log.Error(err) e.Error(http.StatusInternalServerError, err, err.Error())
e.Logger.Error(err)
return return
} }
//新增操作 // 绑定数据
err = control.Bind(c) err = e.Bind(control)
if err != nil { if err != nil {
e.Error(http.StatusUnprocessableEntity, err, "参数验证失败") e.Error(http.StatusUnprocessableEntity, err, "参数验证失败")
return 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 := service.SysMenu{}
serviceSysMenu.Orm = db err = serviceSysMenu.MakeLog(e.Logger).MakeOrm(e.Orm).InsertSysMenu(control).Error
serviceSysMenu.Log = log
err = serviceSysMenu.InsertSysMenu(object)
if err != nil { if err != nil {
log.Error(err) e.Logger.Error(err)
e.Error(http.StatusInternalServerError, err, "创建失败") e.Error(http.StatusInternalServerError, err, "创建失败")
return return
} }
e.OK(control.GetId(), "创建成功")
e.OK(object.GetId(), "创建成功")
} }
// UpdateSysMenu 修改菜单 // UpdateSysMenu 修改菜单
@@ -165,40 +157,37 @@ func (e SysMenu) InsertSysMenu(c *gin.Context) {
// @Security Bearer // @Security Bearer
func (e SysMenu) UpdateSysMenu(c *gin.Context) { func (e SysMenu) UpdateSysMenu(c *gin.Context) {
control := new(dto.SysMenuControl) control := new(dto.SysMenuControl)
err := e.MakeContext(c).
e.Context = c MakeLogger().
log := e.GetLogger() MakeOrm().
Errors
db, err := e.GetOrm()
if err != nil { if err != nil {
log.Error(err) e.Logger.Error(err)
return return
} }
//更新操作 // 绑定数据
err = control.Bind(c) err = e.Bind(control)
if err != nil { if err != nil {
e.Error(http.StatusUnprocessableEntity, err, "参数验证失败") e.Error(http.StatusUnprocessableEntity, err, "参数验证失败")
return return
} }
object, err := control.Generate() control.SetUpdateBy(user.GetUserId(c))
if err != nil {
e.Error(http.StatusInternalServerError, err, "模型生成失败")
return
}
object.SetUpdateBy(user.GetUserId(c))
serviceSysMenu := service.SysMenu{} serviceSysMenu := service.SysMenu{}
serviceSysMenu.Orm = db err = serviceSysMenu.
serviceSysMenu.Log = log MakeOrm(e.Orm).
err = serviceSysMenu.UpdateSysMenu(object) MakeLog(e.Logger).
UpdateSysMenu(control).Error
if err != nil { if err != nil {
log.Error(err) e.Logger.Error(err)
return return
} }
e.OK(object.GetId(), "更新成功") e.OK(control.GetId(), "更新成功")
} }
// DeleteSysMenu 删除菜单
// @Summary 删除菜单 // @Summary 删除菜单
// @Description 删除数据 // @Description 删除数据
// @Tags 菜单 // @Tags 菜单
@@ -238,6 +227,7 @@ func (e SysMenu) DeleteSysMenu(c *gin.Context) {
e.OK(control.GetId(), "删除成功") e.OK(control.GetId(), "删除成功")
} }
// GetMenuRole 根据角色名称获取菜单列表数据(左菜单使用)
// @Summary 根据角色名称获取菜单列表数据(左菜单使用) // @Summary 根据角色名称获取菜单列表数据(左菜单使用)
// @Description 获取JSON // @Description 获取JSON
// @Tags 菜单 // @Tags 菜单
@@ -268,6 +258,7 @@ func (e SysMenu) GetMenuRole(c *gin.Context) {
e.OK(result, "") e.OK(result, "")
} }
// GetMenuIDS 获取角色对应的菜单id数组
// @Summary 获取角色对应的菜单id数组 // @Summary 获取角色对应的菜单id数组
// @Description 获取JSON // @Description 获取JSON
// @Tags 菜单 // @Tags 菜单
@@ -296,33 +287,7 @@ func (e SysMenu) GetMenuIDS(c *gin.Context) {
e.OK(result, "") e.OK(result, "")
} }
//// GetMenuTreeRoleselect 角色修改中的菜单列表 // GetMenuTreeSelect 获取菜单树
//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,
// })
//}
// @Summary 获取菜单树 // @Summary 获取菜单树
// @Description 获取JSON // @Description 获取JSON
// @Tags 菜单 // @Tags 菜单
@@ -370,4 +335,4 @@ func (e SysMenu) GetMenuTreeSelect(c *gin.Context) {
"menus": result, "menus": result,
"checkedKeys": menuIds, "checkedKeys": menuIds,
}, "获取成功") }, "获取成功")
} }
+36 -23
View File
@@ -2,11 +2,11 @@ package dto
import ( import (
"encoding/json" "encoding/json"
"go-admin/app/admin/models"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "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/api"
"go-admin/app/admin/models"
common "go-admin/common/models"
"go-admin/common/dto" "go-admin/common/dto"
) )
@@ -58,6 +58,15 @@ type SysMenuControl struct {
Sort int `form:"sort" comment:"排序"` //排序 Sort int `form:"sort" comment:"排序"` //排序
Visible string `form:"visible" comment:"是否显示"` //是否显示 Visible string `form:"visible" comment:"是否显示"` //是否显示
IsFrame string `form:"isFrame" comment:"是否frame"` //是否frame 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 映射上下文中的结构体数据 // Bind 映射上下文中的结构体数据
@@ -82,26 +91,30 @@ func (s *SysMenuControl) Bind(ctx *gin.Context) error {
} }
// Generate 结构体数据转化 从 Control 至 model 对应的模型 // Generate 结构体数据转化 从 Control 至 model 对应的模型
func (s *SysMenuControl) Generate() (*models.SysMenu, error) { func (s *SysMenuControl) Generate(model *models.SysMenu) {
return &models.SysMenu{ model.MenuId = s.MenuId
MenuId: s.MenuId, model.MenuName = s.MenuName
MenuName: s.MenuName, model.Title = s.Title
Title: s.Title, model.Icon = s.Icon
Icon: s.Icon, model.Path = s.Path
Path: s.Path, model.Paths = s.Paths
Paths: s.Paths, model.MenuType = s.MenuType
MenuType: s.MenuType, model.Action = s.Action
Action: s.Action, model.SysApi = s.SysApi
SysApi: s.SysApi, model.Permission = s.Permission
Permission: s.Permission, model.ParentId = s.ParentId
ParentId: s.ParentId, model.NoCache = s.NoCache
NoCache: s.NoCache, model.Breadcrumb = s.Breadcrumb
Breadcrumb: s.Breadcrumb, model.Component = s.Component
Component: s.Component, model.Sort = s.Sort
Sort: s.Sort, model.Visible = s.Visible
Visible: s.Visible, model.IsFrame = s.IsFrame
IsFrame: s.IsFrame, if s.CreateBy != 0 {
}, nil model.CreateBy = s.CreateBy
}
if s.UpdateBy != 0 {
model.UpdateBy = s.UpdateBy
}
} }
// GetId 获取数据对应的ID // GetId 获取数据对应的ID
@@ -155,4 +168,4 @@ type MenuRole struct {
type SelectRole struct { type SelectRole struct {
RoleId int `uri:"roleId"` RoleId int `uri:"roleId"`
} }
+33 -16
View File
@@ -2,18 +2,33 @@ package service
import ( import (
"errors" "errors"
"github.com/go-admin-team/go-admin-core/sdk/pkg" "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/models"
"go-admin/app/admin/service/dto" "go-admin/app/admin/service/dto"
cDto "go-admin/common/dto" cDto "go-admin/common/dto"
"go-admin/common/service" "go-admin/common/service"
"gorm.io/gorm"
) )
type SysMenu struct { type SysMenu struct {
service.Service 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列表 // GetSysMenuPage 获取SysMenu列表
func (e *SysMenu) GetSysMenuPage(c *dto.SysMenuSearch) (*[]models.SysMenu, error) { func (e *SysMenu) GetSysMenuPage(c *dto.SysMenuSearch) (*[]models.SysMenu, error) {
var m = make([]models.SysMenu, 0) var m = make([]models.SysMenu, 0)
@@ -73,17 +88,16 @@ func (e *SysMenu) GetSysMenu(d *dto.SysMenuById, model *models.SysMenu) error {
} }
// InsertSysMenu 创建SysMenu对象 // InsertSysMenu 创建SysMenu对象
func (e *SysMenu) InsertSysMenu(model *models.SysMenu) error { func (e *SysMenu) InsertSysMenu(c *dto.SysMenuControl) *SysMenu {
var err error var err error
var data models.SysMenu var data models.SysMenu
c.Generate(&data)
err = e.Orm.Model(&data). err = e.Orm.Create(&data).Error
Create(model).Error
if err != nil { if err != nil {
e.Log.Errorf("db error:%s", err) e.Log.Errorf("db error:%s", err)
return err _ = e.AddError(err)
} }
return nil return e
} }
func (e *SysMenu) initPaths(menu *models.SysMenu) error { func (e *SysMenu) initPaths(menu *models.SysMenu) error {
@@ -105,20 +119,23 @@ func (e *SysMenu) initPaths(menu *models.SysMenu) error {
} }
// UpdateSysMenu 修改SysMenu对象 // UpdateSysMenu 修改SysMenu对象
func (e *SysMenu) UpdateSysMenu(c *models.SysMenu) error { func (e *SysMenu) UpdateSysMenu(c *dto.SysMenuControl) *SysMenu {
var err error var err error
model := models.SysMenu{}
db := e.Orm.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(c) e.Orm.First(&model, c.GetId())
c.Generate(&model)
db := e.Orm.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Save(&model)
if db.Error != nil { if db.Error != nil {
e.Log.Errorf("db error:%s", err) e.Log.Errorf("db error:%s", err)
return err _ = e.AddError(err)
return e
} }
if db.RowsAffected == 0 { if db.RowsAffected == 0 {
return errors.New("无权更新该数据") e.AddError(errors.New("无权更新该数据"))
return e
} }
return nil return e
} }
// RemoveSysMenu 删除SysMenu // RemoveSysMenu 删除SysMenu
func (e *SysMenu) RemoveSysMenu(d *dto.SysMenuById) error { func (e *SysMenu) RemoveSysMenu(d *dto.SysMenuById) error {
@@ -303,4 +320,4 @@ func (e *SysMenu) getByRoleName(roleName string) (Menus []models.SysMenu, err er
return return
} }
return return
} }
+45 -4
View File
@@ -1,12 +1,13 @@
package apis package apis
import ( import (
"errors"
"fmt" "fmt"
"github.com/go-admin-team/go-admin-core/sdk/api" "github.com/gin-gonic/gin/binding"
"net/http" "net/http"
"github.com/gin-gonic/gin" "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"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger" "github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"github.com/go-admin-team/go-admin-core/sdk/pkg/response" "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
@@ -16,13 +17,26 @@ import (
type Api struct { type Api struct {
Context *gin.Context Context *gin.Context
Logger *logger.Logger 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上下文 // MakeContext 设置http上下文
func (e *Api) MakeContext(c *gin.Context) { func (e *Api) MakeContext(c *gin.Context) *Api {
fmt.Println(&c) fmt.Println(&c)
e.Context = c e.Context = c
fmt.Println(&e.Context) fmt.Println(&e.Context)
return e
} }
// GetLogger 获取上下文提供的日志 // GetLogger 获取上下文提供的日志
@@ -32,6 +46,9 @@ func (e Api) GetLogger() *logger.Logger {
func (e Api) Bind(d interface{}, bindings ...binding.Binding) error { func (e Api) Bind(d interface{}, bindings ...binding.Binding) error {
var err error var err error
if len(bindings) == 0 {
bindings = append(bindings, binding.JSON, nil)
}
for i := range bindings { for i := range bindings {
switch bindings[i] { switch bindings[i] {
case binding.JSON: case binding.JSON:
@@ -74,6 +91,30 @@ func (e Api) GetOrm() (*gorm.DB, error) {
return db, nil 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 通常错误数据处理 // Error 通常错误数据处理
func (e Api) Error(code int, err error, msg string) { func (e Api) Error(code int, err error, msg string) {
response.Error(e.Context, code, err, msg) response.Error(e.Context, code, err, msg)
@@ -92,4 +133,4 @@ func (e Api) PageOK(result interface{}, count int, pageIndex int, pageSize int,
// Custom 兼容函数 // Custom 兼容函数
func (e Api) Custom(data gin.H) { func (e Api) Custom(data gin.H) {
response.Custum(e.Context, data) response.Custum(e.Context, data)
} }
+11
View File
@@ -1,6 +1,7 @@
package service package service
import ( import (
"fmt"
"github.com/go-admin-team/go-admin-core/sdk/pkg/logger" "github.com/go-admin-team/go-admin-core/sdk/pkg/logger"
"gorm.io/gorm" "gorm.io/gorm"
) )
@@ -10,4 +11,14 @@ type Service struct {
Msg string Msg string
MsgID string MsgID string
Log *logger.Logger 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
} }