Files
common-server-public/bbs-go-active/server/internal/services/role_menu_service.go
2025-03-03 17:43:50 +08:00

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
})
}