更新管理员相关接口
This commit is contained in:
@@ -181,6 +181,68 @@ type AdminLoginResult struct {
|
||||
Admin *model.Admin
|
||||
}
|
||||
|
||||
// CreateAdmin 创建管理员账号
|
||||
func (s *AuthService) CreateAdmin(ctx context.Context, username, password, nickname string, role int8) (*model.Admin, error) {
|
||||
// 检查用户名是否已存在
|
||||
existingAdmin, err := s.adminRepo.GetByUsername(ctx, username)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to check existing admin: %w", err)
|
||||
}
|
||||
if existingAdmin != nil {
|
||||
return nil, errors.New("username already exists")
|
||||
}
|
||||
|
||||
// 对密码进行哈希处理
|
||||
passwordHash, err := HashPassword(password)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to hash password: %w", err)
|
||||
}
|
||||
|
||||
// 创建管理员
|
||||
admin := &model.Admin{
|
||||
Username: username,
|
||||
PasswordHash: passwordHash,
|
||||
Nickname: nickname,
|
||||
Role: role,
|
||||
}
|
||||
|
||||
if err := s.adminRepo.Create(ctx, admin); err != nil {
|
||||
return nil, fmt.Errorf("failed to create admin: %w", err)
|
||||
}
|
||||
|
||||
return admin, nil
|
||||
}
|
||||
|
||||
// UpdateAdmin 更新管理员信息
|
||||
func (s *AuthService) UpdateAdmin(ctx context.Context, id int32, nickname string, role int8) (*model.Admin, error) {
|
||||
admin, err := s.adminRepo.GetByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get admin: %w", err)
|
||||
}
|
||||
if admin == nil {
|
||||
return nil, errors.New("admin not found")
|
||||
}
|
||||
|
||||
admin.Nickname = nickname
|
||||
admin.Role = role
|
||||
|
||||
if err := s.adminRepo.Update(ctx, admin); err != nil {
|
||||
return nil, fmt.Errorf("failed to update admin: %w", err)
|
||||
}
|
||||
|
||||
return admin, nil
|
||||
}
|
||||
|
||||
// DeleteAdmin 删除管理员
|
||||
func (s *AuthService) DeleteAdmin(ctx context.Context, id int32) error {
|
||||
return s.adminRepo.Delete(ctx, id)
|
||||
}
|
||||
|
||||
// GetAdminList 获取管理员列表
|
||||
func (s *AuthService) GetAdminList(ctx context.Context, page, pageSize int) ([]model.Admin, int64, error) {
|
||||
return s.adminRepo.List(ctx, page, pageSize)
|
||||
}
|
||||
|
||||
// HashPassword creates a bcrypt hash of the password
|
||||
func HashPassword(password string) (string, error) {
|
||||
bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
|
||||
Reference in New Issue
Block a user