102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
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)
|
|
}
|