From ca00d46353230b9df00967325ec3053012692561 Mon Sep 17 00:00:00 2001 From: ata <17314593+asdxzaaaaa@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 10:06:21 +0000 Subject: [PATCH] Add internal/service/user.go --- internal/service/user.go | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 internal/service/user.go diff --git a/internal/service/user.go b/internal/service/user.go new file mode 100644 index 0000000..4c9aef5 --- /dev/null +++ b/internal/service/user.go @@ -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) +}