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