Skip to content

Commit

Permalink
部分api加入事务控制
Browse files Browse the repository at this point in the history
  • Loading branch information
Junvary committed Jul 14, 2023
1 parent c6d0356 commit e780824
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 107 deletions.
40 changes: 36 additions & 4 deletions GQA-BACKEND/service/private/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/global"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/model"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/utils"
"gorm.io/gorm"
)

type ServiceApi struct{}
Expand Down Expand Up @@ -33,8 +34,31 @@ func (s *ServiceApi) EditApi(toEditApi model.SysApi) (err error) {
if toEditApi.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo"))
}
err = global.GqaDb.Save(&toEditApi).Error
return err
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
var oldApi model.SysApi
if err = tx.Where("id = ?", toEditApi.Id).First(&oldApi).Error; err != nil {
return err
}
if err = tx.Save(&toEditApi).Error; err != nil {
return err
}
var oldRoleApiList []model.SysRoleApi
if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", oldApi.ApiGroup, oldApi.ApiMethod, oldApi.ApiPath).
Find(&oldRoleApiList).Error; err != nil {
return err
}
// 将oldRoleApiList中的ApiGroup、ApiMethod、ApiPath替换成toEditApi中的ApiGroup、ApiMethod、ApiPath并保存回数据库
for _, oldRoleApi := range oldRoleApiList {
oldRoleApi.ApiGroup = toEditApi.ApiGroup
oldRoleApi.ApiMethod = toEditApi.ApiMethod
oldRoleApi.ApiPath = toEditApi.ApiPath
if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", oldApi.ApiGroup, oldApi.ApiMethod, oldApi.ApiPath).
Updates(&oldRoleApi).Error; err != nil {
return err
}
}
return nil
})
}

func (s *ServiceApi) AddApi(toAddApi model.SysApi) (err error) {
Expand All @@ -50,8 +74,16 @@ func (s *ServiceApi) DeleteApiById(id uint) (err error) {
if sysApi.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo"))
}
err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysApi).Error
return err
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("id = ?", id).Unscoped().Delete(&sysApi).Error; err != nil {
return err
}
if err = tx.Where("api_group = ? and api_method = ? and api_path = ?", sysApi.ApiGroup, sysApi.ApiMethod, sysApi.ApiPath).
Delete(&model.SysRoleApi{}).Error; err != nil {
return err
}
return nil
})
}

func (s *ServiceApi) QueryApiById(id uint) (err error, apiInfo model.SysApi) {
Expand Down
36 changes: 18 additions & 18 deletions GQA-BACKEND/service/private/dept.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,6 @@ func (s *ServiceDept) EditDept(toEditDept model.SysDept) (err error) {
if err = global.GqaDb.Where("id = ?", toEditDept.Id).First(&sysDept).Error; err != nil {
return err
}
if sysDept.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditDept.DeptCode)
}
//err = global.GqaDb.Updates(&toEditDept).Error
err = global.GqaDb.Save(&toEditDept).Error
return err
}
Expand All @@ -66,24 +62,26 @@ func (s *ServiceDept) AddDept(toAddDept model.SysDept) (err error) {
}

func (s *ServiceDept) DeleteDeptById(id uint) (err error) {
var sysDept model.SysDept
if err = global.GqaDb.Where("id = ?", id).First(&sysDept).Error; err != nil {
return err
}
if sysDept.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysDept.DeptCode)
}
if err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysDept).Error; err != nil {
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
var sysDept model.SysDept
if err = tx.Where("id = ?", id).First(&sysDept).Error; err != nil {
return err
}
if err = tx.Where("id = ?", id).Unscoped().Delete(&sysDept).Error; err != nil {
return err
}
var sysDeptUser model.SysDeptUser
err = tx.Where("sys_dept_dept_code = ?", sysDept.DeptCode).Delete(&sysDeptUser).Error
return err
}
var sysDeptUser model.SysDeptUser
err = global.GqaDb.Where("sys_dept_dept_code = ?", sysDept.DeptCode).Delete(&sysDeptUser).Error
return err
})
}

func (s *ServiceDept) QueryDeptById(id uint) (err error, deptInfo model.SysDept) {
var dept model.SysDept
err = global.GqaDb.Preload("LeaderUser").Preload("CreatedByUser").Preload("UpdatedByUser").First(&dept, "id = ?", id).Error
err = global.GqaDb.Preload("LeaderUser").
Preload("CreatedByUser").
Preload("UpdatedByUser").
First(&dept, "id = ?", id).Error
return err, dept
}

Expand All @@ -98,7 +96,9 @@ func (s *ServiceDept) QueryUserByDept(deptCode *model.RequestDeptCode) (err erro

func (s *ServiceDept) RemoveDeptUser(toDeleteDeptUser *model.RequestDeptUser) (err error) {
var deptUser model.SysDeptUser
err = global.GqaDb.Where("sys_dept_dept_code = ? and sys_user_username = ?", toDeleteDeptUser.DeptCode, toDeleteDeptUser.Username).Delete(&deptUser).Error
err = global.GqaDb.
Where("sys_dept_dept_code = ? and sys_user_username = ?", toDeleteDeptUser.DeptCode, toDeleteDeptUser.Username).
Delete(&deptUser).Error
return err
}

Expand Down
29 changes: 21 additions & 8 deletions GQA-BACKEND/service/private/menu.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/global"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/model"
"github.com/Junvary/gin-quasar-admin/GQA-BACKEND/utils"
"gorm.io/gorm"
)

type ServiceMenu struct{}
Expand Down Expand Up @@ -50,13 +51,15 @@ func (s *ServiceMenu) EditMenu(toEditMenu model.SysMenu) (err error) {
if sysMenu.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditMenu.Title)
}
//先删除关联button表中menu_name的记录
var menuButton model.SysButton
if err = global.GqaDb.Where("menu_name = ?", toEditMenu.Name).Delete(&menuButton).Error; err != nil {
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
//先删除关联button表中menu_name的记录
var menuButton model.SysButton
if err = tx.Where("menu_name = ?", toEditMenu.Name).Delete(&menuButton).Error; err != nil {
return err
}
err = tx.Save(&toEditMenu).Error
return err
}
err = global.GqaDb.Save(&toEditMenu).Error
return err
})
}

func (s *ServiceMenu) AddMenu(toAddMenu model.SysMenu) (err error) {
Expand All @@ -72,8 +75,18 @@ func (s *ServiceMenu) DeleteMenuById(id uint) (err error) {
if sysMenu.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysMenu.Title)
}
err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysMenu).Error
return err
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("id = ?", id).Unscoped().Delete(&sysMenu).Error; err != nil {
return err
}
if err = tx.Where("sys_menu_name = ?", sysMenu.Name).Delete(&model.SysRoleMenu{}).Error; err != nil {
return err
}
if err = tx.Where("menu_name = ?", sysMenu.Name).Delete(&model.SysButton{}).Error; err != nil {
return err
}
return nil
})
}

func (s *ServiceMenu) QueryMenuById(id uint) (err error, menuInfo model.SysMenu) {
Expand Down
110 changes: 63 additions & 47 deletions GQA-BACKEND/service/private/role.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@ func (s *ServiceRole) EditRole(toEditRole model.SysRole) (err error) {
return err
}
if sysRole.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditRole.RoleCode)
return errors.New(utils.GqaI18n("StableCantDo") + sysRole.RoleCode)
}
//不允许改变RoleCode
if sysRole.RoleCode != toEditRole.RoleCode {
return errors.New(utils.GqaI18n("EditFailed") + sysRole.RoleCode)
}
//err = global.GqaDb.Updates(&toEditRole).Error
err = global.GqaDb.Save(&toEditRole).Error
Expand All @@ -61,25 +65,30 @@ func (s *ServiceRole) DeleteRoleById(id uint) (err error) {
if sysRole.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysRole.RoleCode)
}
roleCode := sysRole.RoleCode
// 删除 sys_role_api 表的权限
err = global.GqaDb.Where("role_code = ?", roleCode).Delete(model.SysRoleApi{}).Error
// 删除 sys_role 表的数据
err = global.GqaDb.Unscoped().Delete(&sysRole).Error
if err != nil {
return err
}
// 删除 sys_user_role 表的对应关系
err = global.GqaDb.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysUserRole{}).Error
if err != nil {
return err
}
// 删除 sys_role_menu 表的对应关系
err = global.GqaDb.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleMenu{}).Error
if err != nil {
return err
}
return err
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
roleCode := sysRole.RoleCode
// 删除 sys_role 表的数据
if err = tx.Unscoped().Delete(&sysRole).Error; err != nil {
return err
}
// 删除 sys_role_api 表的权限
if err = tx.Where("role_code = ?", roleCode).Delete(model.SysRoleApi{}).Error; err != nil {
return err
}
// 删除 sys_user_role 表的对应关系
if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysUserRole{}).Error; err != nil {
return err
}
// 删除 sys_role_menu 表的对应关系
if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleMenu{}).Error; err != nil {
return err
}
// 删除sys_role_button 表的对应关系
if err = tx.Where("sys_role_role_code = ?", roleCode).Delete(&model.SysRoleButton{}).Error; err != nil {
return err
}
return nil
})
}

func (s *ServiceRole) QueryRoleById(id uint) (err error, roleInfo model.SysRole) {
Expand All @@ -95,29 +104,31 @@ func (s *ServiceRole) GetRoleMenuList(roleCode *model.RequestRoleCode) (err erro
}

func (s *ServiceRole) EditRoleMenu(toEditRoleMenu *model.RequestRoleMenuEdit) (err error) {
err = global.GqaDb.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleMenu{}).Error
if err != nil {
return err
}
err = global.GqaDb.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleButton{}).Error
if err != nil {
return err
}
if len(toEditRoleMenu.RoleMenu) != 0 {
err = global.GqaDb.Model(&model.SysRoleMenu{}).Create(&toEditRoleMenu.RoleMenu).Error
if err != nil {
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleMenu{}).Error; err != nil {
return err
}
}
if len(toEditRoleMenu.RoleButton) != 0 {
err = global.GqaDb.Model(&model.SysRoleButton{}).Create(&toEditRoleMenu.RoleButton).Error
if err != nil {
if err = tx.Where("sys_role_role_code=?", toEditRoleMenu.RoleCode).Delete(&model.SysRoleButton{}).Error; err != nil {
return err
}
}
defaultPage := toEditRoleMenu.DefaultPage
err = global.GqaDb.Model(&model.SysRole{}).Where("role_code = ?", toEditRoleMenu.RoleCode).Update("default_page", defaultPage).Error
return nil
if len(toEditRoleMenu.RoleMenu) != 0 {
err = tx.Model(&model.SysRoleMenu{}).Create(&toEditRoleMenu.RoleMenu).Error
if err != nil {
return err
}
}
if len(toEditRoleMenu.RoleButton) != 0 {
err = tx.Model(&model.SysRoleButton{}).Create(&toEditRoleMenu.RoleButton).Error
if err != nil {
return err
}
}
defaultPage := toEditRoleMenu.DefaultPage
err = tx.Model(&model.SysRole{}).
Where("role_code = ?", toEditRoleMenu.RoleCode).
Update("default_page", defaultPage).Error
return err
})
}

func (s *ServiceRole) GetRoleApiList(roleCode *model.RequestRoleCode) (err error, api []model.SysRoleApi) {
Expand All @@ -127,13 +138,16 @@ func (s *ServiceRole) GetRoleApiList(roleCode *model.RequestRoleCode) (err error
}

func (s *ServiceRole) EditRoleApi(toEditRoleApi *model.RequestEditRoleApi) (err error) {
err = global.GqaDb.Where("role_code = ?", toEditRoleApi.RoleCode).Delete(&model.SysRoleApi{}).Error

if len(toEditRoleApi.RoleApi) != 0 {
err = global.GqaDb.Model(&model.SysRoleApi{}).Create(&toEditRoleApi.RoleApi).Error
return err
}
return nil
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("role_code = ?", toEditRoleApi.RoleCode).Delete(&model.SysRoleApi{}).Error; err != nil {
return err
}
if len(toEditRoleApi.RoleApi) != 0 {
err = tx.Model(&model.SysRoleApi{}).Create(&toEditRoleApi.RoleApi).Error
return err
}
return nil
})
}

func (s *ServiceRole) QueryUserByRole(roleCode *model.RequestRoleCode) (err error, user []model.SysUser) {
Expand All @@ -150,7 +164,9 @@ func (s *ServiceRole) RemoveRoleUser(toRemoveRoleUser *model.RequestRoleUser) (e
if toRemoveRoleUser.Username == "admin" && toRemoveRoleUser.RoleCode == "super-admin" {
return errors.New(utils.GqaI18n("CantRemoveAdminFromAdmin"))
}
err = global.GqaDb.Where("sys_role_role_code = ? and sys_user_username = ?", toRemoveRoleUser.RoleCode, toRemoveRoleUser.Username).Delete(&roleUser).Error
err = global.GqaDb.
Where("sys_role_role_code = ? and sys_user_username = ?", toRemoveRoleUser.RoleCode, toRemoveRoleUser.Username).
Delete(&roleUser).Error
return err
}

Expand Down
38 changes: 22 additions & 16 deletions GQA-BACKEND/service/private/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,18 @@ func (s *ServiceUser) EditUser(toEditUser model.SysUser) (err error) {
if sysUser.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + toEditUser.Username)
}
global.GqaDb.Where("sys_user_username = ?", toEditUser.Username).Delete(&model.SysDeptUser{})
if err = global.GqaDb.Where("id = ?", toEditUser.Id).First(&sysUser).Error; err != nil {
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("sys_user_username = ?", toEditUser.Username).Delete(&model.SysDeptUser{}).Error; err != nil {
return err
}
if err = tx.Where("id = ?", toEditUser.Id).First(&sysUser).Error; err != nil {
return err
}
toEditUser.Password = sysUser.Password
//err = global.GqaDb.Updates(&toEditUser).Error
err = tx.Save(&toEditUser).Error
return err
}
toEditUser.Password = sysUser.Password
//err = global.GqaDb.Updates(&toEditUser).Error
err = global.GqaDb.Save(&toEditUser).Error
return err
})
}

func (s *ServiceUser) AddUser(toAddUser *model.SysUser) (err error) {
Expand Down Expand Up @@ -83,16 +87,18 @@ func (s *ServiceUser) DeleteUserById(id uint) (err error) {
if sysUser.Stable == "yesNo_yes" {
return errors.New(utils.GqaI18n("StableCantDo") + sysUser.Username)
}
if err = global.GqaDb.Where("id = ?", id).Unscoped().Delete(&sysUser).Error; err != nil {
return err
}
var sysDeptUser model.SysDeptUser
if err = global.GqaDb.Where("sys_user_username = ?", sysUser.Username).Delete(&sysDeptUser).Error; err != nil {
return global.GqaDb.Transaction(func(tx *gorm.DB) error {
if err = tx.Where("id = ?", id).Unscoped().Delete(&sysUser).Error; err != nil {
return err
}
var sysDeptUser model.SysDeptUser
if err = tx.Where("sys_user_username = ?", sysUser.Username).Delete(&sysDeptUser).Error; err != nil {
return err
}
var sysUserRole model.SysUserRole
err = tx.Where("sys_user_username = ?", sysUser.Username).Delete(&sysUserRole).Error
return err
}
var sysUserRole model.SysUserRole
err = global.GqaDb.Where("sys_user_username = ?", sysUser.Username).Delete(&sysUserRole).Error
return err
})
}

func (s *ServiceUser) GetUserByUsername(username string) (err error, userInfo model.SysUser) {
Expand Down
Loading

0 comments on commit e780824

Please sign in to comment.