init
This commit is contained in:
125
bbs-go/server/internal/services/role_menu_service.go
Normal file
125
bbs-go/server/internal/services/role_menu_service.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"bbs-go/internal/models"
|
||||
"bbs-go/internal/repositories"
|
||||
|
||||
"github.com/mlogclub/simple/common/arrs"
|
||||
"github.com/mlogclub/simple/common/dates"
|
||||
"github.com/mlogclub/simple/sqls"
|
||||
"github.com/mlogclub/simple/web/params"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var RoleMenuService = newRoleMenuService()
|
||||
|
||||
func newRoleMenuService() *roleMenuService {
|
||||
return &roleMenuService{}
|
||||
}
|
||||
|
||||
type roleMenuService struct {
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Get(id int64) *models.RoleMenu {
|
||||
return repositories.RoleMenuRepository.Get(sqls.DB(), id)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Take(where ...interface{}) *models.RoleMenu {
|
||||
return repositories.RoleMenuRepository.Take(sqls.DB(), where...)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Find(cnd *sqls.Cnd) []models.RoleMenu {
|
||||
return repositories.RoleMenuRepository.Find(sqls.DB(), cnd)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) FindOne(cnd *sqls.Cnd) *models.RoleMenu {
|
||||
return repositories.RoleMenuRepository.FindOne(sqls.DB(), cnd)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) FindPageByParams(params *params.QueryParams) (list []models.RoleMenu, paging *sqls.Paging) {
|
||||
return repositories.RoleMenuRepository.FindPageByParams(sqls.DB(), params)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) FindPageByCnd(cnd *sqls.Cnd) (list []models.RoleMenu, paging *sqls.Paging) {
|
||||
return repositories.RoleMenuRepository.FindPageByCnd(sqls.DB(), cnd)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Count(cnd *sqls.Cnd) int64 {
|
||||
return repositories.RoleMenuRepository.Count(sqls.DB(), cnd)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Create(t *models.RoleMenu) error {
|
||||
return repositories.RoleMenuRepository.Create(sqls.DB(), t)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Update(t *models.RoleMenu) error {
|
||||
return repositories.RoleMenuRepository.Update(sqls.DB(), t)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Updates(id int64, columns map[string]interface{}) error {
|
||||
return repositories.RoleMenuRepository.Updates(sqls.DB(), id, columns)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) UpdateColumn(id int64, name string, value interface{}) error {
|
||||
return repositories.RoleMenuRepository.UpdateColumn(sqls.DB(), id, name, value)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) Delete(id int64) {
|
||||
repositories.RoleMenuRepository.Delete(sqls.DB(), id)
|
||||
}
|
||||
|
||||
func (s *roleMenuService) GetByRole(roleId int64) []models.RoleMenu {
|
||||
return s.Find(sqls.NewCnd().Eq("role_id", roleId))
|
||||
}
|
||||
|
||||
func (s *roleMenuService) GetMenuIdsByRoles(roleIds []int64) (menuIds []int64) {
|
||||
list := s.Find(sqls.NewCnd().In("role_id", roleIds))
|
||||
for _, element := range list {
|
||||
menuIds = append(menuIds, element.MenuId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *roleMenuService) GetMenuIdsByRole(roleId int64) (menuIds []int64) {
|
||||
list := s.GetByRole(roleId)
|
||||
for _, element := range list {
|
||||
menuIds = append(menuIds, element.MenuId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *roleMenuService) SaveRoleMenus(roleId int64, menuIds []int64) error {
|
||||
currentMenuIds := s.GetMenuIdsByRole(roleId)
|
||||
return sqls.DB().Transaction(func(tx *gorm.DB) error {
|
||||
var (
|
||||
addIds []int64 // 本次需要新增的
|
||||
delIds []int64 // 本次需要删除的
|
||||
)
|
||||
for _, menuId := range menuIds {
|
||||
if !arrs.Contains(currentMenuIds, menuId) {
|
||||
addIds = append(addIds, menuId)
|
||||
}
|
||||
}
|
||||
for _, menuId := range currentMenuIds {
|
||||
if !arrs.Contains(menuIds, menuId) {
|
||||
delIds = append(delIds, menuId)
|
||||
}
|
||||
}
|
||||
|
||||
for _, menuId := range addIds {
|
||||
if err := repositories.RoleMenuRepository.Create(tx, &models.RoleMenu{
|
||||
RoleId: roleId,
|
||||
MenuId: menuId,
|
||||
CreateTime: dates.NowTimestamp(),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, menuId := range delIds {
|
||||
if err := tx.Delete(&models.RoleMenu{}, "role_id = ? and menu_id = ?", roleId, menuId).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user