// This processes 25 quotes at a time since the max is 25 as per dynamoDB batch write private async Task WriteBatch(IEnumerable <Quote> batchQuotes) { // There is this possibility when there is nothing to approve if (batchQuotes.Count() == 0) { Console.WriteLine("Batch empty"); return; } Console.WriteLine("Writing batch"); Dictionary <string, List <WriteRequest> > writeRequests = new Dictionary <string, List <WriteRequest> >(); writeRequests.Add(DataDefinitions.QUOTES_TABLE, new List <WriteRequest>()); foreach (Quote quote in batchQuotes) { PutRequest request = new PutRequest(QuoteExtensions.AttributesOfQuote(quote)); writeRequests[DataDefinitions.QUOTES_TABLE].Add(new WriteRequest(request)); } BatchWriteItemRequest batchRequest = new BatchWriteItemRequest { RequestItems = writeRequests }; Console.WriteLine("Before writing to dynamodb"); BatchWriteItemResponse batchResponse = await _client.BatchWriteItemAsync(batchRequest); Console.WriteLine($"quotes batch response: {batchResponse.HttpStatusCode}"); }
private async Task <IEnumerable <Quote> > GetAllQuotesToBeApproved() { // One time use variable to kick off the loop below for an initial scan bool initial = true; ScanRequest scanRequest = new ScanRequest { TableName = DataDefinitions.QUOTES_PROPOSAL_TABLE, }; LinkedList <Quote> quotes = new LinkedList <Quote>(); Console.WriteLine("Scanning proposals"); // The reason for the loop is to handle for when having over 1MB of proposals Dictionary <string, AttributeValue> lastKey = null; while (initial || (lastKey != null && lastKey.Count > 0)) { Console.WriteLine("Scan"); // The last key is for pagination and this case to tell where to start for the next scan scanRequest.ExclusiveStartKey = lastKey; ScanResponse scanResponse = await _client.ScanAsync(scanRequest); lastKey = scanResponse.LastEvaluatedKey; foreach (var attribute in scanResponse.Items) { quotes.AddLast(QuoteExtensions.CreateQuoteFromQuoteProposal(attribute)); } if (initial) { initial = false; } } Console.WriteLine("Got proposals"); return(quotes); }