public async Task <PackageAddResult> AddAsync(Package package) { var entity = PackageEntity.FromPackage(package); var operation = TableOperation.Insert(entity); try { await _table.ExecuteAsync(operation); } catch (StorageException e) when(e.IsAlreadyExistsException()) { return(PackageAddResult.PackageAlreadyExists); } return(PackageAddResult.Success); }
private SearchResult ToSearchResult(IReadOnlyList <PackageEntity> packages) { NuGetVersion latestVersion = null; PackageEntity latest = null; var versions = new List <SearchResultVersion>(); long totalDownloads = 0; foreach (var package in packages) { var version = NuGetVersion.Parse(package.OriginalVersion); totalDownloads += package.Downloads; versions.Add(new SearchResultVersion { RegistrationLeafUrl = _url.GetRegistrationLeafUrl(package.Id, version), Version = package.NormalizedVersion, Downloads = package.Downloads, }); if (latestVersion == null || version > latestVersion) { latest = package; latestVersion = version; } } var iconUrl = latest.HasEmbeddedIcon ? _url.GetPackageIconDownloadUrl(latest.Id, latestVersion) : latest.IconUrl; return(new SearchResult { PackageId = latest.Id, Version = latest.NormalizedVersion, Description = latest.Description, Authors = JsonConvert.DeserializeObject <string[]>(latest.Authors), IconUrl = iconUrl, LicenseUrl = latest.LicenseUrl, ProjectUrl = latest.ProjectUrl, RegistrationIndexUrl = _url.GetRegistrationIndexUrl(latest.Id), Summary = latest.Summary, Tags = JsonConvert.DeserializeObject <string[]>(latest.Tags), Title = latest.Title, TotalDownloads = totalDownloads, Versions = versions, }); }
public TableOperation AddPackage(Package package) { if (package == null) { throw new ArgumentNullException(nameof(package)); } var version = package.Version; var normalizedVersion = version.ToNormalizedString(); var entity = new PackageEntity { PartitionKey = package.Id.ToLowerInvariant(), RowKey = normalizedVersion.ToLowerInvariant(), Id = package.Id, NormalizedVersion = normalizedVersion, OriginalVersion = version.ToFullString(), Authors = JsonConvert.SerializeObject(package.Authors), Description = package.Description, Downloads = package.Downloads, HasReadme = package.HasReadme, HasEmbeddedIcon = package.HasEmbeddedIcon, IsPrerelease = package.IsPrerelease, Language = package.Language, Listed = package.Listed, MinClientVersion = package.MinClientVersion, Published = package.Published, RequireLicenseAcceptance = package.RequireLicenseAcceptance, SemVerLevel = (int)package.SemVerLevel, Summary = package.Summary, Title = package.Title, IconUrl = package.IconUrlString, LicenseUrl = package.LicenseUrlString, ReleaseNotes = package.ReleaseNotes, ProjectUrl = package.ProjectUrlString, RepositoryUrl = package.RepositoryUrlString, RepositoryType = package.RepositoryType, Tags = JsonConvert.SerializeObject(package.Tags), Dependencies = SerializeList(package.Dependencies, AsDependencyModel), PackageTypes = SerializeList(package.PackageTypes, AsPackageTypeModel), TargetFrameworks = SerializeList(package.TargetFrameworks, f => f.Moniker) }; return(TableOperation.Insert(entity)); }
private Package AsPackage(PackageEntity entity) { var targetFrameworks = JsonConvert.DeserializeObject <List <string> >(entity.TargetFrameworks) .Select(f => new TargetFramework { Moniker = f }) .ToList(); return(new Package { Id = entity.Id, NormalizedVersionString = entity.NormalizedVersion, OriginalVersionString = entity.OriginalVersion, Authors = JsonConvert.DeserializeObject <string[]>(entity.Authors), Description = entity.Description, Downloads = entity.Downloads, HasReadme = entity.HasReadme, HasEmbeddedIcon = entity.HasEmbeddedIcon, IsPrerelease = entity.IsPrerelease, Language = entity.Language, Listed = entity.Listed, MinClientVersion = entity.MinClientVersion, Published = entity.Published, RequireLicenseAcceptance = entity.RequireLicenseAcceptance, SemVerLevel = (SemVerLevel)entity.SemVerLevel, Summary = entity.Summary, Title = entity.Title, ReleaseNotes = entity.ReleaseNotes, IconUrl = ParseUri(entity.IconUrl), LicenseUrl = ParseUri(entity.LicenseUrl), ProjectUrl = ParseUri(entity.ProjectUrl), RepositoryUrl = ParseUri(entity.RepositoryUrl), RepositoryType = entity.RepositoryType, Tags = JsonConvert.DeserializeObject <string[]>(entity.Tags), Dependencies = ParseDependencies(entity.Dependencies), PackageTypes = ParsePackageTypes(entity.PackageTypes), TargetFrameworks = targetFrameworks, }); }