Add internal/service/user.go
This commit is contained in:
101
internal/service/user.go
Normal file
101
internal/service/user.go
Normal file
@@ -0,0 +1,101 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user