/** * package service * 作用:用户管理服务 */ package service import ( "errors" "xk-websocket-v2/internal/model" "xk-websocket-v2/internal/utils" "gorm.io/gorm" ) // UserService 用户服务结构体 type UserService struct { DB *gorm.DB } // UserSvc 全局单例 var UserSvc *UserService /** * InitUserService * 功能:初始化用户服务 */ func InitUserService(db *gorm.DB) { UserSvc = &UserService{DB: db} } /** * GetUserByID * 功能:根据ID获取用户 */ func (s *UserService) GetUserByID(userID string) (*model.User, error) { var user model.User result := s.DB.Where("id = ?", userID).First(&user) if result.Error != nil { return nil, result.Error } user.Password = "" // 清除密码 return &user, nil } /** * GetUserByEmail * 功能:根据邮箱获取用户 */ func (s *UserService) GetUserByEmail(email string) (*model.User, error) { var user model.User result := s.DB.Where("email = ?", email).First(&user) if result.Error != nil { return nil, result.Error } user.Password = "" // 清除密码 return &user, nil } /** * GetUserByPhone * 功能:根据手机号获取用户 */ func (s *UserService) GetUserByPhone(phone string) (*model.User, error) { var user model.User result := s.DB.Where("phone = ?", phone).First(&user) if result.Error != nil { return nil, result.Error } user.Password = "" // 清除密码 return &user, nil } /** * CreateUser * 功能:创建用户 */ func (s *UserService) CreateUser(user *model.User) error { // 如果提供了密码,加密密码 if user.Password != "" { hashedPassword, err := utils.HashPassword(user.Password) if err != nil { return err } user.Password = hashedPassword } return s.DB.Create(user).Error } /** * UpdateUser * 功能:更新用户信息 */ func (s *UserService) UpdateUser(userID string, updates map[string]interface{}) error { // 如果更新密码,需要加密 if password, ok := updates["password"].(string); ok && password != "" { hashedPassword, err := utils.HashPassword(password) if err != nil { return err } updates["password"] = hashedPassword } return s.DB.Model(&model.User{}).Where("id = ?", userID).Updates(updates).Error } /** * DeleteUser * 功能:删除用户 */ func (s *UserService) DeleteUser(userID string) error { return s.DB.Where("id = ?", userID).Delete(&model.User{}).Error } /** * GetUserList * 功能:获取用户列表(分页) */ func (s *UserService) GetUserList(page, pageSize int) ([]model.User, int64, error) { var users []model.User var total int64 // 获取总数 s.DB.Model(&model.User{}).Count(&total) // 分页查询 offset := (page - 1) * pageSize result := s.DB.Offset(offset).Limit(pageSize).Find(&users) if result.Error != nil { return nil, 0, result.Error } // 清除所有用户的密码 for i := range users { users[i].Password = "" } return users, total, nil } /** * SearchUsers * 功能:搜索用户(按用户名、ID、邮箱、手机号) */ func (s *UserService) SearchUsers(keyword string, limit int) ([]model.User, error) { var users []model.User query := s.DB.Where("name LIKE ? OR id LIKE ? OR email LIKE ? OR phone LIKE ?", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%") if limit > 0 { query = query.Limit(limit) } result := query.Find(&users) if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) { return nil, result.Error } // 清除所有用户的密码 for i := range users { users[i].Password = "" } return users, nil }