package service import ( "errors" "golang.org/x/crypto/bcrypt" "newaterobot-process/entity" "newaterobot-process/model" ) // UserService 用户服务 type UserService struct { userModel *model.UserModel } // NewUserService 创建用户服务实例 func NewUserService() *UserService { return &UserService{ userModel: &model.UserModel{}, } } // Register 用户注册 func (s *UserService) Register(username, password, email, nickname string) (*entity.User, error) { // 检查用户名是否已存在 _, err := s.userModel.GetByUsername(username) if err == nil { return nil, errors.New("用户名已存在") } // 密码加密 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return nil, err } // 创建用户 user := &entity.User{ Username: username, Password: string(hashedPassword), Email: email, Nickname: nickname, Status: 1, } err = s.userModel.Create(user) if err != nil { return nil, err } return user, nil } // Login 用户登录 func (s *UserService) Login(username, password string) (string, error) { // 获取用户信息 user, err := s.userModel.GetByUsername(username) if err != nil { return "", errors.New("用户名或密码错误") } // 验证密码 err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)) if err != nil { return "", errors.New("用户名或密码错误") } // 生成token token, err := GetJWTService().GenerateToken(user.ID, user.Username) if err != nil { return "", err } return token, nil } // GetUserByID 根据ID获取用户信息 func (s *UserService) GetUserByID(id uint) (*entity.User, error) { return s.userModel.GetByID(id) }