public static async Task Run(
            [ServiceBusTrigger(QueueNames.Persistence, Connection = "ServiceBusConnectionString")]
            Message message,
            string correlationId,
            [Table(TableNames.User)] CloudTable table,
            [ServiceBus(QueueNames.StatusProcess, Connection = "ServiceBusConnectionString")] IAsyncCollector <Message> statusTopic,
            ILogger log)
        {
            await table.CreateIfNotExistsAsync();

            var payload = message.Convert <UserImportModelDto>();

            var entity = new UserEntity
            {
                PartitionKey  = PartitionKeys.Users,
                RowKey        = payload.Id.ToString(),
                Age           = payload.Age,
                Timestamp     = DateTimeOffset.UtcNow,
                Address       = payload.Address,
                Email         = payload.Email,
                EyeColor      = payload.EyeColor,
                FavoriteFruit = payload.FavoriteFruit,
                Gender        = payload.Gender,
                Greeting      = payload.Greeting,
                IsActive      = payload.IsActive,
                Name          = payload.Name,
                Phone         = payload.Phone,
                ETag          = "*"
            };


            var operation = TableOperation.InsertOrReplace(entity);
            var result    = await table.ExecuteAsync(operation);

            if (result.HttpStatusCode.IsSuccessCode())
            {
                log.LogInformation("User ({userId}) successfully stored in persistence store", payload.Id);
            }
            else
            {
                log.LogCritical("Failed to store user ({user}) in persistence store", payload);
            }

            var command = new ImportStatusChangedCommand {
                Succeeded = 1
            };
            await statusTopic.AddAsync(command.Convert(correlationId));

            await statusTopic.FlushAsync();
        }
Example #2
0
        public static async Task Run(
            [ServiceBusTrigger(QueueNames.Error, Connection = "ServiceBusConnectionString")]
            Message message,
            string correlationId,
            [Table(TableNames.Error)] CloudTable table,
            [ServiceBus(QueueNames.StatusProcess, Connection = "ServiceBusConnectionString")] IAsyncCollector <Message> statusTopic,
            ILogger log)
        {
            await table.CreateIfNotExistsAsync();

            var payload     = message.Convert <ImportErrorCommand>();
            var errorEntity = new ErrorEntity
            {
                ErrorMessage  = payload.ErrorMessage,
                CorrelationId = correlationId,
                ObjectJson    = JsonConvert.SerializeObject(payload.ImportModel),
                Timestamp     = DateTimeOffset.UtcNow,
                RowKey        = Guid.NewGuid().ToString(),
                PartitionKey  = PartitionKeys.Errors
            };

            var insertOperation = TableOperation.Insert(errorEntity);
            var result          = await table.ExecuteAsync(insertOperation);

            if (result.HttpStatusCode.IsSuccessCode())
            {
                log.LogInformation("Stored error message in persistence");
            }
            else
            {
                log.LogCritical(
                    "Failed to store error message while importing sequence ({correlationId})",
                    correlationId);
            }

            var command = new ImportStatusChangedCommand {
                Failed = 1
            };
            await statusTopic.AddAsync(command.Convert(correlationId));

            await statusTopic.FlushAsync();
        }