public Task <bool> Validate(SolutionDao solution, out InvalidSolutionDao invalidSolutionModel, CancellationToken token = default) { // Validate if each package has proper name List <InvalidPorojectDao> invalidProjects = null; foreach (var project in solution.Projects) { var invalidPackages = project.Packages.Where(p => string.IsNullOrEmpty(p.PackageName)); int totalPackages = project.Packages.Count(); if (!invalidPackages.Any()) { continue; } invalidProjects ??= new List <InvalidPorojectDao>(); var invalidProject = new InvalidPorojectDao() { InvalidPackages = invalidPackages.Select(p => new InvalidPackageDao() { Name = p.PackageName, Version = p.PackageVersion, }), FailedPackages = invalidPackages.Count(), TotalPackages = totalPackages, Uri = project.Url }; invalidProjects.Add(invalidProject); solution.FailedPackages += invalidPackages.Count(); solution.TotalPackages += totalPackages; } if (invalidProjects != null) { var invalidSolution = new InvalidSolutionDao() { Uri = solution.Url, ScrappingDate = DateTime.Now, InvalidProjects = invalidProjects, }; invalidSolutionModel = invalidSolution; // strip invalid projects, we will scrap them later //solution.Projects = solution.Projects.Where(p => !invalidProjects.Any(ip => p.Url == ip.Uri)); if (invalidProjects.Count() / solution.Projects.Count() > this.options.Value.FailedPackagesThreshold) { return(Task.FromResult(false)); } } invalidSolutionModel = null; return(Task.FromResult(true)); }
public async Task CreateInvalidSolution(InvalidSolutionDao solution, CancellationToken cancellationToken = default) { var solutions = await this.GetInvalidSolutions(cancellationToken); var newSolutions = solutions.Concat(new InvalidSolutionDao[] { solution }); var stringContent = JsonSerializer.Serialize(newSolutions); await lockInvalidObject.WaitAsync(cancellationToken); try { await File.WriteAllTextAsync(InvalidJsonPath, stringContent, cancellationToken); } finally { lockInvalidObject.Release(); } }
public static InvalidSolution Map(InvalidSolutionDao solution) { return(new InvalidSolution() { ScrappingDate = solution.ScrappingDate, Uri = solution.Uri, InvalidProjects = solution.InvalidProjects.Select(p => new InvalidProject() { Uri = p.Uri, FailedPackages = p.FailedPackages, InvalidPackages = p.InvalidPackages.Select(pg => new InvalidPackage() { Version = pg.Version, Name = pg.Name, }), TotalPackages = p.TotalPackages, }) }); }