126 lines
3.5 KiB
Go
126 lines
3.5 KiB
Go
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
|
|
})
|
|
}
|