Files
2026-07-10 10:06:21 +00:00

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)
}