Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
        }