public async Task FunctionHandler(DynamoDBEvent dynamoEvent, ILambdaContext context)
        {
            foreach (var record in dynamoEvent.Records)
            {
                if (record.EventName == "INSERT")
                {
                    var pedido = record.Dynamodb.NewImage.ToObject <Pedido>();
                    pedido.Status = StatusDoPedido.Coletado;

                    try
                    {
                        await ProcessarValorDoPedido(pedido);

                        await AmazonUtil.EnviarParaFila(EnumFilasSQS.pedido, pedido);

                        context.Logger.LogLine($"Sucesso na coleta do pedido: '{pedido.Id}'");
                    }
                    catch (Exception ex)
                    {
                        context.Logger.LogLine($"Erro: '{ex.Message}'");
                        pedido.JustificativaDeCancelamento = ex.Message;
                        pedido.Cancelado = true;
                        await AmazonUtil.EnviarParaFila(EnumFilasSNS.falha, pedido);
                    }

                    await pedido.SalvarAsync();
                }
            }
        }
        private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context)
        {
            var pedido = JsonConvert.DeserializeObject <Pedido>(message.Body);

            pedido.Status = StatusDoPedido.Reservado;

            foreach (var produto in pedido.Produtos)
            {
                try
                {
                    await BaixarEstoque(produto.Id, produto.Quantidade);

                    produto.Reservado = true;
                    context.Logger.LogLine($"Produto baixado do estoque {produto.Id} - {produto.Nome}");
                }
                catch (ConditionalCheckFailedException)
                {
                    pedido.JustificativaDeCancelamento = $"Produto indisponível no estoque {produto.Id} - {produto.Nome}";
                    pedido.Cancelado = true;
                    context.Logger.LogLine($"Erro: {pedido.JustificativaDeCancelamento}");
                    break;
                }
            }

            if (pedido.Cancelado)
            {
                foreach (var produto in pedido.Produtos)
                {
                    if (produto.Reservado)
                    {
                        await DevolverAoEstoque(produto.Id, produto.Quantidade);

                        produto.Reservado = false;
                        context.Logger.LogLine($"Produto devolvido ao estoque {produto.Id} - {produto.Nome}");
                    }
                }

                await AmazonUtil.EnviarParaFila(EnumFilasSNS.falha, pedido);

                await pedido.SalvarAsync();
            }
            else
            {
                await AmazonUtil.EnviarParaFila(EnumFilasSQS.reservado, pedido);

                await pedido.SalvarAsync();
            }
        }
Beispiel #3
0
 public static string UploadFileV2(string path, string FileName, string BucketName, string ContentType)
 {
     return(AmazonUtil.uploadToS3("", FileName, BucketName, path));
 }
Beispiel #4
0
 public static string DeleteFile(string FileName, string BucketName)
 {
     return(AmazonUtil.DeleteFile(BucketName, FileName));
 }
Beispiel #5
0
 public static async Task <string> UploadFileAsync(ApplicationDbContext context, string path, string FileName, string BucketName, string ContentType)
 {
     return(await AmazonUtil.uploadToS3Async(context, "", FileName, BucketName, path));
 }