Ejemplo n.º 1
0
        // 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}");
        }
Ejemplo n.º 2
0
        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);
        }