package service import ( "errors" "gotest/internal/model" "gotest/internal/repository" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) // UserService 用户服务 type UserService struct { userRepo *repository.UserRepository } // NewUserService 创建用户服务实例 func NewUserService(userRepo *repository.UserRepository) *UserService { return &UserService{userRepo: userRepo} } // GetProfile 获取当前登录用户资料 func (s *UserService) GetProfile(userID uint) (*model.User, error) { return s.userRepo.FindByID(userID) } // UpdateProfile 更新当前登录用户资料 func (s *UserService) UpdateProfile(userID uint, avatar string) error { user, err := s.userRepo.FindByID(userID) if err != nil { return err } user.Avatar = avatar return s.userRepo.Update(user) } // ChangePassword 修改当前登录用户密码 func (s *UserService) ChangePassword(userID uint, oldPassword, newPassword string) error { user, err := s.userRepo.FindByID(userID) if err != nil { return err } if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(oldPassword)); err != nil { return errors.New("原密码错误") } hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.DefaultCost) if err != nil { return err } user.Password = string(hashedPassword) return s.userRepo.Update(user) } // ListUsers 分页查询用户列表(管理端) func (s *UserService) ListUsers(page, pageSize int) ([]model.User, int64, error) { return s.userRepo.List(page, pageSize) } // CreateUser 创建用户(管理端) func (s *UserService) CreateUser(username, password, phone, role string) error { // 检查用户名是否已存在 if _, err := s.userRepo.FindByUsername(username); err == nil { return errors.New("用户名已存在") } else if !errors.Is(err, gorm.ErrRecordNotFound) { return err } hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } user := model.User{ Username: username, Password: string(hashedPassword), Phone: phone, Role: role, Status: 1, } return s.userRepo.Create(&user) } // UpdateUser 更新用户信息(管理端) func (s *UserService) UpdateUser(id uint, phone, role string, status int) error { user, err := s.userRepo.FindByID(id) if err != nil { return err } user.Phone = phone user.Role = role user.Status = status return s.userRepo.Update(user) } // DeleteUser 删除用户(管理端,软删除) func (s *UserService) DeleteUser(id uint) error { return s.userRepo.Delete(id) }