Exemple #1
0
        /// <summary>
        /// This method is called for every Lambda invocation. This method takes in an S3 event object and can be used
        /// to respond to S3 notifications.
        /// </summary>
        /// <param name="evnt"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task <string> FunctionHandler(S3Event evnt, ILambdaContext context)
        {
            var s3Event = evnt.Records?[0].S3;

            if (s3Event == null)
            {
                return(null);
            }

            try
            {
                RedisDataAgent agent = new RedisDataAgent();
                string         value = await agent.RightPopAsync("ExcelTask");

                context.Logger.LogLine($"Parsing of {value} file is started.");
                S3           s3     = new S3(S3Client);
                StreamReader reader = await s3.ReadObjectDataAsync(value);

                CSVReader         csvReader = new CSVReader();
                List <CSVSaleDto> sales     = csvReader.ReadDocument <CSVSaleDto>(reader);
                InsertMissingData(sales);
                LoadData();
                List <Sale> salesEntity = new List <Sale>();
                foreach (var item in sales.AsParallel())
                {
                    Sale newSale = BuildObject(item);
                    salesEntity.Add(newSale);
                }
                await dbContext.AddRangeAsync(salesEntity);

                await dbContext.SaveChangesAsync();

                await s3.DeleteFileASync(value);

                string returnValue = $"Parsing of {value} file is completed successfully!";
                context.Logger.LogLine(returnValue);
                return(returnValue);
            }
            catch (Exception e)
            {
                context.Logger.LogLine(e.Message);
                context.Logger.LogLine(e.InnerException.Message);
                throw;
            }
        }