54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"gotest/internal/model"
|
|
"gotest/internal/repository"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
// AdminService 管理员服务,负责管理员检查与初始化
|
|
type AdminService struct {
|
|
userRepo *repository.UserRepository
|
|
}
|
|
|
|
// NewAdminService 创建管理员服务实例
|
|
func NewAdminService(userRepo *repository.UserRepository) *AdminService {
|
|
return &AdminService{userRepo: userRepo}
|
|
}
|
|
|
|
// CheckAdmin 检查管理员是否已存在
|
|
func (s *AdminService) CheckAdmin() (bool, error) {
|
|
count, err := s.userRepo.Count()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return count > 0, nil
|
|
}
|
|
|
|
// InitAdmin 初始化管理员账号(仅在无任何用户时允许)
|
|
func (s *AdminService) InitAdmin(username, password string) error {
|
|
// 已存在用户时禁止初始化
|
|
count, err := s.userRepo.Count()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if count > 0 {
|
|
return errors.New("系统已初始化,禁止重复操作")
|
|
}
|
|
|
|
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return s.userRepo.Create(&model.User{
|
|
Username: username,
|
|
Password: string(hashedPassword),
|
|
Role: "admin",
|
|
Status: 1,
|
|
})
|
|
}
|