public async Task<IPaginatedList<DependencyDto>> GetByRepositoryIdAsync(Guid repoId, IEnumerable<EcosystemKind> kinds, string search, int pageIndex = 1, int pageSize = 10) { var filter = kinds.ToIntArray(); VcsRepository repository = context.VcsRepositories.Find(repoId); List<string> assetNames = context.Assets.Where(asset => asset.RepositoryId == repoId).Select(asset => extractor.ExtractPublishName(asset)).ToList(); IQueryable<Dependency> query = context.Dependencies.AsQueryable(); if (filter.Any()) { query = query.Where(dependency => filter.Contains((int)dependency.Kind)); } if (!string.IsNullOrWhiteSpace(search)) { query = query.Where(dependency => dependency.Name.Contains(search)); } query = query.Where(dependency => assetNames.Contains(dependency.Name) || context.DependencyVersions.Any(dv => dv.DependencyId == dependency.Id && string.Equals(dv.ProjectUrl, repository.Url) || string.Equals(dv.ProjectUrl, repository.WebUrl))); var paging = query.Select(dependency => new DependencyDto { Assets = context.AssetDependencies.Count(ad => ad.DependencyId == dependency.Id), DependencyId = dependency.Id, Kind = dependency.Kind, Name = dependency.Name, Versions = context.DependencyVersions.Count(dv => dv.DependencyId == dependency.Id) }) .OrderByDescending(d => d.Assets) .ThenByDescending(d => d.Versions); return await PaginatedList<DependencyDto>.CreateAsync(paging, pageIndex, pageSize); }
public async Task <List <string> > GetPublishedNamesByRepositoryIdAsync(Guid repositoryId) { List <Asset> assets = await context.Assets.Where(asset => asset.RepositoryId == repositoryId).ToListAsync(); return(assets.Select(asset => extractor.ExtractPublishName(asset)).ToList()); }