Beispiel #1
0
        /// <summary>
        /// Set error in result
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public async Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            UploadIntegrationImportCommandResult commandResult;

            try
            {
                commandResult = await _handler
                                .Handle(command, cancellationToken)
                                .ConfigureAwait(Await.Default);
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
            {
                commandResult = new UploadIntegrationImportCommandResult
                {
                    Success   = false,
                    Message   = "Error executing integration import",
                    Exception = ex,
                };
            }

            return(commandResult);
        }
Beispiel #2
0
        private async Task <UploadIntegrationImportCommandResult> HandleWithErrorLogging(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            try
            {
                var commandResult = await _handler
                                    .Handle(command, cancellationToken)
                                    .ConfigureAwait(Await.Default);

                return(commandResult);
            }
            catch (Exception ex)
            {
                const string commandName = nameof(UploadIntegrationImportCommand);

                _logger.ErrorFormat(
                    ex,
                    "Error executing command {0} :\r\n{1}",
                    commandName,
                    _logger.Serialize(command));

                throw;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Validate upload integration import command
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            _validator.ValidateObject(command);

            return(_handler.Handle(command, cancellationToken));
        }
Beispiel #4
0
 /// <summary>
 /// Handle the command
 /// </summary>
 /// <param name="command">The command</param>
 /// <param name="cancellationToken">The cancellation token</param>
 /// <returns>The result</returns>
 public Task <UploadIntegrationImportCommandResult> Handle(
     UploadIntegrationImportCommand command,
     CancellationToken cancellationToken)
 {
     if (_logger.IsErrorEnabled)
     {
         return(HandleWithErrorLogging(command, cancellationToken));
     }
     else
     {
         return(_handler.Handle(command, cancellationToken));
     }
 }
        /// <summary>
        /// Handles uploading the integration import
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public async Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            var commandResult = new UploadIntegrationImportCommandResult();

            var integrationImport = command.Item;

            Require.NotNull(integrationImport, nameof(integrationImport));

            var query = new CreateStreamFromPathQuery
            {
                Path = integrationImport.File
            };

            using (var queryResult = await _queryHandler
                                     .Handle(query, cancellationToken)
                                     .ConfigureAwait(Await.Default))
            {
                var uploadRequest = new UploadIntegrationImportV1Request
                {
                    IntegrationImportId = command.IntegrationImportId,
                    File     = queryResult.File,
                    FileName = integrationImport.FileName,
                    Size     = queryResult.Size,
                };

                var response = await _client
                               .Execute(uploadRequest, cancellationToken)
                               .ConfigureAwait(Await.Default);

                if (response.IsSuccessful)
                {
                    commandResult.Success = true;
                    commandResult.Message = "";
                    uploadRequest.Dispose();
                }
                else
                {
                    commandResult.Success = false;
                    commandResult.Message = "Error uploading integration import";
                    uploadRequest.Dispose();
                }
            }

            return(commandResult);
        }
        /// <summary>
        /// Start an integration import upload
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public async Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            UploadIntegrationImportCommandResult commandResult;

            var integrationImport = command.Item;

            Require.NotNull(integrationImport, nameof(integrationImport));

            var fileInfo = _fileInfoFactory.FromFileName(integrationImport.File);

            var remoteImportId = integrationImport.FileVersionId;

            var request = new StartIntegrationImportV1Request
            {
                IntegrationId = integrationImport.IntegrationId,
                FileName      = fileInfo.Name,
                FileDate      = integrationImport.FileDate,
                FileSize      = fileInfo.Length,
                FileVersionId = remoteImportId
            };

            var response = await _client
                           .Execute(request, cancellationToken)
                           .ConfigureAwait(Await.Default);

            if (response.IsSuccessful)
            {
                command.IntegrationImportId = response.Model.IntegrationImportId;

                commandResult = await _handler
                                .Handle(command, cancellationToken)
                                .ConfigureAwait(Await.Default);
            }
            else
            {
                commandResult = new UploadIntegrationImportCommandResult
                {
                    Success = false,
                    Message = "Error starting integration import",
                };
            }

            return(commandResult);
        }
Beispiel #7
0
        /// <summary>
        /// Report status back to api
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public async Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            var stopwatch = Stopwatch.StartNew();

            var commandResult = await _handler
                                .Handle(command, cancellationToken)
                                .ConfigureAwait(Await.Default);

            stopwatch.Stop();

            int duration = Convert(stopwatch.ElapsedMilliseconds);

            string exception = null;

            if (commandResult.Exception != null)
            {
                exception = commandResult.Exception.ToString();

                if (exception.Length > ExceptionLength)
                {
                    exception = exception.Substring(0, ExceptionLength);
                }
            }

            var request = new ReportIntegrationImportV1Request
            {
                IntegrationImportId = command.IntegrationImportId,
                Result =
                    commandResult.Success == true ?
                    UploadIntegrationImportV1Result.Success :
                    UploadIntegrationImportV1Result.Failed,
                Duration  = duration,
                Message   = commandResult.Message,
                Exception = exception,
            };

            _ = await _client
                .Execute(request, cancellationToken)
                .ConfigureAwait(Await.Default);

            return(commandResult);
        }
        /// <summary>
        /// Execute upload and move file after
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public async Task <UploadIntegrationImportCommandResult> Handle(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            var commandResult = await _handler
                                .Handle(command, cancellationToken)
                                .ConfigureAwait(Await.Default);

            if (commandResult.Success == true)
            {
                var configuration = _configuration.Value;

                string doneFolder = configuration.DoneFolder;

                string sourceFile = command.Item.File;

                var sourceFileInfo = _factory.FromFileName(sourceFile);

                string fileName = sourceFileInfo.Name;

                string targetFile = _path.Combine(doneFolder, fileName);

                var targetFileInfo = _factory.FromFileName(targetFile);

                if (targetFileInfo.Exists)
                {
                    targetFileInfo.Delete();
                }

                if (targetFileInfo.Directory.Exists == false)
                {
                    targetFileInfo.Directory.Create();
                }

                sourceFileInfo.MoveTo(targetFile);
            }

            return(commandResult);
        }
        private async Task <UploadIntegrationImportCommandResult> HandleWithDebug(
            UploadIntegrationImportCommand command,
            CancellationToken cancellationToken)
        {
            const string commandName = nameof(UploadIntegrationImportCommand);

            _logger.DebugFormat(
                "Executing command {0} :\r\n{1}",
                commandName,
                _logger.Serialize(command));

            var commandResult = await _handler
                                .Handle(command, cancellationToken)
                                .ConfigureAwait(Await.Default);

            _logger.DebugFormat(
                "Executed command {0} :\r\n{1}",
                commandName,
                _logger.Serialize(commandResult));

            return(commandResult);
        }