package service import ( "fmt" "dd_fiber_api/internal/admin_auth" "dd_fiber_api/internal/admin_auth/dao" "dd_fiber_api/pkg/snowflake" "golang.org/x/crypto/bcrypt" ) // AdminUserService 管理员用户服务 type AdminUserService struct { dao *dao.AdminUserDAO } // NewAdminUserService 创建管理员用户服务 func NewAdminUserService(adminUserDAO *dao.AdminUserDAO) *AdminUserService { return &AdminUserService{ dao: adminUserDAO, } } // ListAdminUsers 列出管理员用户 func (s *AdminUserService) ListAdminUsers(keyword string, page, pageSize int) ([]*admin_auth.AdminUser, int, error) { if page < 1 { page = 1 } if pageSize < 1 { pageSize = 10 } if pageSize > 100 { pageSize = 100 } return s.dao.List(keyword, page, pageSize) } // GetAdminUser 获取管理员用户详情 func (s *AdminUserService) GetAdminUser(id string) (*admin_auth.AdminUser, error) { return s.dao.GetByID(id) } // CreateAdminUser 创建管理员用户 func (s *AdminUserService) CreateAdminUser(user *admin_auth.AdminUser, password string) error { // 生成ID id := snowflake.GenerateID() user.ID = id // 加密密码 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return fmt.Errorf("加密密码失败: %v", err) } user.Password = string(hashedPassword) // 设置默认值 if user.Status == 0 { user.Status = 1 // 默认启用 } return s.dao.Create(user) } // UpdateAdminUser 更新管理员用户 func (s *AdminUserService) UpdateAdminUser(user *admin_auth.AdminUser, password string) error { // 如果提供了新密码,则加密 if password != "" { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return fmt.Errorf("加密密码失败: %v", err) } user.Password = string(hashedPassword) } return s.dao.Update(user) } // DeleteAdminUser 删除管理员用户 func (s *AdminUserService) DeleteAdminUser(id string) error { return s.dao.Delete(id) } // GetUserRoles 获取用户的角色ID列表 func (s *AdminUserService) GetUserRoles(userID string) ([]string, error) { return s.dao.GetUserRoleIDs(userID) } // SetUserRoles 设置用户的角色 func (s *AdminUserService) SetUserRoles(userID string, roleIDs []string) error { return s.dao.SetUserRoles(userID, roleIDs) }