Files
web_template/internal/service/admin.go
2026-07-10 10:06:21 +00:00

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