mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 10:13:01 +00:00
refactor🎨 链式调用改造
This commit is contained in:
+32
-67
@@ -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 菜单
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user