user.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package service
  2. import (
  3. "errors"
  4. "golang.org/x/crypto/bcrypt"
  5. "newaterobot-process/entity"
  6. "newaterobot-process/model"
  7. )
  8. // UserService 用户服务
  9. type UserService struct {
  10. userModel *model.UserModel
  11. }
  12. // NewUserService 创建用户服务实例
  13. func NewUserService() *UserService {
  14. return &UserService{
  15. userModel: &model.UserModel{},
  16. }
  17. }
  18. // Register 用户注册
  19. func (s *UserService) Register(username, password, email, nickname string) (*entity.User, error) {
  20. // 检查用户名是否已存在
  21. _, err := s.userModel.GetByUsername(username)
  22. if err == nil {
  23. return nil, errors.New("用户名已存在")
  24. }
  25. // 密码加密
  26. hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
  27. if err != nil {
  28. return nil, err
  29. }
  30. // 创建用户
  31. user := &entity.User{
  32. Username: username,
  33. Password: string(hashedPassword),
  34. Email: email,
  35. Nickname: nickname,
  36. Status: 1,
  37. }
  38. err = s.userModel.Create(user)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return user, nil
  43. }
  44. // Login 用户登录
  45. func (s *UserService) Login(username, password string) (string, error) {
  46. // 获取用户信息
  47. user, err := s.userModel.GetByUsername(username)
  48. if err != nil {
  49. return "", errors.New("用户名或密码错误")
  50. }
  51. // 验证密码
  52. err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
  53. if err != nil {
  54. return "", errors.New("用户名或密码错误")
  55. }
  56. // 生成token
  57. token, err := GetJWTService().GenerateToken(user.ID, user.Username)
  58. if err != nil {
  59. return "", err
  60. }
  61. return token, nil
  62. }
  63. // GetUserByID 根据ID获取用户信息
  64. func (s *UserService) GetUserByID(id uint) (*entity.User, error) {
  65. return s.userModel.GetByID(id)
  66. }