public List <Notification> GetFailedNotificationsForSending()
        {
            List <Notification> notifications = new AutoConstructedList <Notification>();

            var query = new QueryRequest()
            {
                TableName = "mail-sending-pagoefectivo-pe_Test",
                IndexName = "State-index_Test",
                KeyConditionExpression   = "#sta = :v_State",
                ExpressionAttributeNames = new Dictionary <string, string>()
                {
                    { "#sta", "State" }
                },
                ExpressionAttributeValues = new Dictionary <string, AttributeValue>()
                {
                    { ":v_State", new AttributeValue()
                      {
                          N = StateNotifications.Fail.GetHashCode().ToString()
                      } }
                },
                ScanIndexForward = true
            };

            return(GetNotifications(query));
        }
        public async Task <List <Dictionary <string, AttributeValue> > > QueryByDomain(string domain, int limit, bool asc, Dictionary <string, AttributeValue> lastEvaluatedKey = null)
        {
            var queryRequest = new QueryRequest()
            {
                TableName                 = TableName,
                IndexName                 = "gidx_Domain",
                Limit                     = limit,
                ScanIndexForward          = asc,
                ProjectionExpression      = "MessageId, CreatedTimeStampUtc, PublishedTimeStampUtc, Domain, MessageType",
                KeyConditionExpression    = "Domain = :domain",
                ReturnConsumedCapacity    = new ReturnConsumedCapacity("INDEXES"),
                ExpressionAttributeValues = new Dictionary <string, AttributeValue>()
                {
                    { ":domain", new AttributeValue()
                      {
                          S = domain
                      } }
                }
            };

            if (lastEvaluatedKey != null)
            {
                queryRequest.ExclusiveStartKey = lastEvaluatedKey;
            }

            var dynamodbClient = CreateDynamoDbClient();
            var queryResponse  = await dynamodbClient.QueryAsync(queryRequest);

            List <Dictionary <string, AttributeValue> > results = new AutoConstructedList <Dictionary <string, AttributeValue> >();

            if (queryResponse.Items.Any() &&
                queryResponse.Items.Count < limit &&
                queryResponse.LastEvaluatedKey != null && queryResponse.LastEvaluatedKey.Any())
            {
                var moreResults = await QueryByDomain(domain, limit - queryResponse.Items.Count, asc, queryResponse.LastEvaluatedKey);

                results.AddRange(moreResults);
            }
            else
            {
                results.AddRange(queryResponse.Items);
            }

            return(results);
        }
        public void Set(Dictionary <string, string> values, string domainName, string itemName)
        {
            var client = new AmazonSimpleDBClient(
                new BasicAWSCredentials(
                    this.AccessKey,
                    this.SecretKey),
                this.RegionEndpoint);

            var unused1 = client.CreateDomainAsync(
                new CreateDomainRequest(
                    domainName)).Result;

            var list = new AutoConstructedList <ReplaceableAttribute>();

            list.AddRange(
                values.Select(i => new ReplaceableAttribute(i.Key, i.Value, true)));

            var unused2 = client.PutAttributesAsync(
                new PutAttributesRequest(
                    domainName,
                    itemName,
                    list)).Result;
        }