private async Task CreateAssetsByTransferAsync(string transferIdentifier, IList <PictureparkAsset> newTargetAssets) { try { _logger.LogInformation($"Starting import of transfer {transferIdentifier}..."); var fileTransfers = new List <FileTransferCreateItem>(); var transferResult = await CreateFileTransferAsync(transferIdentifier, newTargetAssets); var files = await _client.Transfer.SearchFilesByTransferIdAsync(transferResult.Transfer.Id); foreach (FileTransfer file in files) { var assetForCreation = newTargetAssets.FirstOrDefault(assetForCreationInner => string.Equals(assetForCreationInner.RecommendedFileName, file.Identifier)); var fileTransferCreateItem = new FileTransferCreateItem { FileId = file.Id, LayerSchemaIds = new[] { nameof(SmintIoContentLayer), nameof(SmintIoLicenseLayer) }, Metadata = assetForCreation.GetMetadata() }; fileTransfers.Add(fileTransferCreateItem); } var partialRequest = new ImportTransferPartialRequest() { Items = fileTransfers }; var importResult = await _client.Transfer.PartialImportAsync(transferResult.Transfer.Id, partialRequest); await _client.BusinessProcess.WaitForCompletionAsync(importResult.BusinessProcessId); files = await _client.Transfer.SearchFilesByTransferIdAsync(transferResult.Transfer.Id); foreach (FileTransfer file in files) { var assetForCreation = newTargetAssets.FirstOrDefault(assetForCreationInner => string.Equals(assetForCreationInner.RecommendedFileName, file.Identifier)); assetForCreation.TargetAssetUuid = file.ContentId; } _logger.LogInformation($"Finished import of transfer {transferIdentifier}"); } catch (Exception ex) { _logger.LogError(ex, $"Error importing files for transfer {transferIdentifier}"); await TryDeleteTransferAsync(transferIdentifier); throw; } }
public async Task ShouldPartialImportWithMetadata() { // Arrange var fileTransfers = new List <FileTransferCreateItem>(); var timeout = TimeSpan.FromMinutes(2); await SetupSchema(typeof(PersonShot)).ConfigureAwait(false); string personId = await CreatePerson().ConfigureAwait(false); var contentSearchResult = await RandomHelper.GetRandomContentsAsync(_client, string.Empty, 1, new[] { ContentType.Bitmap }).ConfigureAwait(false); var urls = await GetContentsDownloadUrls(contentSearchResult).ConfigureAwait(false); var createTransferResult = await CreateWebTransferAsync(urls).ConfigureAwait(false); var files = await _client.Transfer.SearchFilesByTransferIdAsync(createTransferResult.Transfer.Id, 1).ConfigureAwait(false); foreach (FileTransfer file in files.Results) { var personTag = new DataDictionary { { "_refId", personId } }; var metadata = new DataDictionary { { nameof(PersonShot), new DataDictionary { { "persons", new[] { personTag } }, } } }; fileTransfers.Add(new FileTransferCreateItem { FileId = file.Id, LayerSchemaIds = new[] { nameof(PersonShot) }, Metadata = metadata }); } var partialRequest = new ImportTransferPartialRequest() { Items = fileTransfers, }; // Act var importResult = await _client.Transfer.PartialImportAsync(createTransferResult.Transfer.Id, partialRequest).ConfigureAwait(false); var waitResult = await _client.BusinessProcess.WaitForCompletionAsync(importResult.BusinessProcessId, timeout).ConfigureAwait(false); // Assert waitResult.LifeCycleHit.Should().Be(BusinessProcessLifeCycle.Succeeded); var result = await _client.Transfer.SearchFilesByTransferIdAsync(createTransferResult.Transfer.Id).ConfigureAwait(false); var contentIds = result.Results.Select(r => r.ContentId); contentIds.Should().HaveCount(1); var createdContent = await _client.Content.GetAsync(contentIds.First(), new[] { ContentResolveBehavior.Metadata }).ConfigureAwait(false); var jMetadata = JObject.FromObject(createdContent.Metadata); jMetadata[nameof(PersonShot).ToLowerCamelCase()]["persons"][0]["_refId"].Value <string>().Should().Be(personId); }