feat():learning后台管理项目初始化
This commit is contained in:
137
internal/services/role_service.go
Normal file
137
internal/services/role_service.go
Normal file
@@ -0,0 +1,137 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go.uber.org/zap"
|
||||
"goalfymax-admin/internal/models"
|
||||
"goalfymax-admin/internal/storage"
|
||||
"goalfymax-admin/pkg/utils"
|
||||
)
|
||||
|
||||
// RoleService 角色服务接口
|
||||
type RoleService interface {
|
||||
Create(req *models.RoleCreateRequest) (*models.Role, error)
|
||||
GetByID(id uint) (*models.Role, error)
|
||||
Update(id uint, req *models.RoleUpdateRequest) (*models.Role, error)
|
||||
Delete(id uint) error
|
||||
List(req *models.RoleListRequest) ([]models.Role, int64, error)
|
||||
UpdateStatus(id uint, status int) error
|
||||
}
|
||||
|
||||
type roleService struct {
|
||||
roleStorage storage.RoleStorage
|
||||
logger *utils.Logger
|
||||
}
|
||||
|
||||
// NewRoleService 创建角色服务实例
|
||||
func NewRoleService(roleStorage storage.RoleStorage, logger *utils.Logger) RoleService {
|
||||
return &roleService{
|
||||
roleStorage: roleStorage,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// Create 创建角色
|
||||
func (s *roleService) Create(req *models.RoleCreateRequest) (*models.Role, error) {
|
||||
// 检查角色名称是否已存在
|
||||
_, err := s.roleStorage.GetByName(req.Name)
|
||||
if err == nil {
|
||||
return nil, errors.New("角色名称已存在")
|
||||
}
|
||||
|
||||
// 创建角色
|
||||
role := &models.Role{
|
||||
Name: req.Name,
|
||||
Level: req.Level,
|
||||
Description: req.Description,
|
||||
IsDefault: req.IsDefault,
|
||||
}
|
||||
|
||||
err = s.roleStorage.Create(role)
|
||||
if err != nil {
|
||||
s.logger.Error("创建角色失败", zap.Error(err))
|
||||
return nil, errors.New("创建角色失败")
|
||||
}
|
||||
|
||||
s.logger.Info("角色创建成功", zap.String("name", role.Name))
|
||||
return role, nil
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取角色
|
||||
func (s *roleService) GetByID(id uint) (*models.Role, error) {
|
||||
return s.roleStorage.GetByID(id)
|
||||
}
|
||||
|
||||
// Update 更新角色
|
||||
func (s *roleService) Update(id uint, req *models.RoleUpdateRequest) (*models.Role, error) {
|
||||
// 获取角色信息
|
||||
role, err := s.roleStorage.GetByID(id)
|
||||
if err != nil {
|
||||
return nil, errors.New("角色不存在")
|
||||
}
|
||||
|
||||
// 检查角色名称是否已被其他角色使用
|
||||
if req.Name != role.Name {
|
||||
existingRole, err := s.roleStorage.GetByName(req.Name)
|
||||
if err == nil && existingRole.ID != id {
|
||||
return nil, errors.New("角色名称已被其他角色使用")
|
||||
}
|
||||
role.Name = req.Name
|
||||
}
|
||||
|
||||
// 更新角色信息
|
||||
role.Name = req.Name
|
||||
role.Level = req.Level
|
||||
role.Description = req.Description
|
||||
role.IsDefault = req.IsDefault
|
||||
|
||||
err = s.roleStorage.Update(role)
|
||||
if err != nil {
|
||||
s.logger.Error("更新角色失败", zap.Error(err))
|
||||
return nil, errors.New("更新角色失败")
|
||||
}
|
||||
|
||||
s.logger.Info("角色更新成功", zap.Uint("role_id", id))
|
||||
return role, nil
|
||||
}
|
||||
|
||||
// Delete 删除角色
|
||||
func (s *roleService) Delete(id uint) error {
|
||||
// 检查角色是否存在
|
||||
_, err := s.roleStorage.GetByID(id)
|
||||
if err != nil {
|
||||
return errors.New("角色不存在")
|
||||
}
|
||||
|
||||
err = s.roleStorage.Delete(id)
|
||||
if err != nil {
|
||||
s.logger.Error("删除角色失败", zap.Error(err))
|
||||
return errors.New("删除角色失败")
|
||||
}
|
||||
|
||||
s.logger.Info("角色删除成功", zap.Uint("role_id", id))
|
||||
return nil
|
||||
}
|
||||
|
||||
// List 获取角色列表
|
||||
func (s *roleService) List(req *models.RoleListRequest) ([]models.Role, int64, error) {
|
||||
return s.roleStorage.List(req)
|
||||
}
|
||||
|
||||
// UpdateStatus 更新角色状态
|
||||
func (s *roleService) UpdateStatus(id uint, status int) error {
|
||||
// 检查角色是否存在
|
||||
_, err := s.roleStorage.GetByID(id)
|
||||
if err != nil {
|
||||
return errors.New("角色不存在")
|
||||
}
|
||||
|
||||
err = s.roleStorage.UpdateStatus(id, status)
|
||||
if err != nil {
|
||||
s.logger.Error("更新角色状态失败", zap.Error(err))
|
||||
return errors.New("更新角色状态失败")
|
||||
}
|
||||
|
||||
s.logger.Info("角色状态更新成功", zap.Uint("role_id", id), zap.Int("status", status))
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user