public async Task CommitBatchAsync(IEnumerable <CelebrityEventBase> events, CancellationToken cancellationToken = default) { if (events is null) { throw new ArgumentNullException(nameof(events)); } var celebrityEvents = events.ToList(); if (celebrityEvents.Any() is false) { return; } var table = _dbContext.GetTargetTable <DynamoDbEventModel>(_configuration); var writer = table.CreateBatchWrite(); var eventModels = ParseToDynamoDbEventModels(celebrityEvents); foreach (var document in eventModels.Select(@event => _dbContext.ToDocument(@event))) { writer.AddDocumentToPut(document); } await writer.ExecuteAsync(cancellationToken); }
public DataRepository(ILogger <DataRepository> logger) { _logger = logger; AWSConfigsDynamoDB.Context.TypeMappings[typeof(Church)] = new TypeMapping(typeof(Church), DdbTableNames.ChurchtableName); AWSConfigsDynamoDB.Context.TypeMappings[typeof(Family)] = new TypeMapping(typeof(Family), DdbTableNames.FamilytableName); AWSConfigsDynamoDB.Context.TypeMappings[typeof(Member)] = new TypeMapping(typeof(Member), DdbTableNames.MembertableName); var config = new Amazon.DynamoDBv2.DataModel.DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2, IgnoreNullValues = true }; _ddbContext = new DynamoDBContext(new AmazonDynamoDBClient(), config); _churchesTable = _ddbContext.GetTargetTable <Church>(new DynamoDBOperationConfig { IgnoreNullValues = true }); _familiesTable = _ddbContext.GetTargetTable <Family>(new DynamoDBOperationConfig { IgnoreNullValues = true }); _membersTable = _ddbContext.GetTargetTable <Member>(new DynamoDBOperationConfig { IgnoreNullValues = true }); }
public async Task <IActionResult> CountVotesAsync() { var table = _context.GetTargetTable <User>(); var voteResult = await table.GetItemAsync("VoteResult"); if (voteResult != null) { return(NoContent()); } var showIdToPhoneNumbers = (await _showsRepository.GetShowsAsync()) .ToDictionary(show => show.Id, ignore => new List <string>()); var users = await _usersRepository.GetUsersAsync(); int totalVotes = 0; foreach (var user in users) { foreach (var showId in user.Votes) { showIdToPhoneNumbers[showId].Add(user.Id); totalVotes++; } } if (totalVotes == 0) { return(BadRequest("No votes")); } var result = showIdToPhoneNumbers.Select(pair => { var doc = new Document(); doc["showId"] = pair.Key; doc["votesCount"] = pair.Value.Count; doc["votes"] = pair.Value; doc["voteRate"] = (pair.Value.Count / (decimal)totalVotes).ToString("P"); return(doc); }) .OrderByDescending(show => show["votesCount"].AsInt()) .ToList(); var doc = new Document(); doc["Id"] = "VoteResult"; doc["Result"] = result; await table.PutItemAsync(doc); return(NoContent()); }
public static async Task <PagedResult <TEntity> > GetPagedQueryResultsAsync <TEntity>( this IDynamoDBContext dynamoDbContext, QueryOperationConfig queryConfig) where TEntity : class { var dbResults = new List <TEntity>(); var table = dynamoDbContext.GetTargetTable <TEntity>(); var search = table.Query(queryConfig); var resultsSet = await search.GetNextSetAsync().ConfigureAwait(false); var paginationToken = search.PaginationToken; if (resultsSet.Any()) { dbResults.AddRange(dynamoDbContext.FromDocuments <TEntity>(resultsSet)); // Look ahead for any more, but only if we have a token if (!string.IsNullOrEmpty(PaginationDetails.EncodeToken(paginationToken))) { queryConfig.PaginationToken = paginationToken; queryConfig.Limit = 1; search = table.Query(queryConfig); resultsSet = await search.GetNextSetAsync().ConfigureAwait(false); if (!resultsSet.Any()) { paginationToken = null; } } } return(new PagedResult <TEntity>(dbResults, new PaginationDetails(paginationToken))); }
public async Task Create(TDTO dto) { var table = DynamoDbContext.GetTargetTable <TDTO>(); var document = DynamoDbContext.ToDocument(dto); var expectedState = _dynamoDbResourcePolicy.GetExpectedState(false, dto); try { await table.PutItemAsync(document, new PutItemOperationConfig { ExpectedState = expectedState }); } catch (ConditionalCheckFailedException) { throw new ValidationException(ErrorCodes.DuplicateItem, $"The same key {_dynamoDbResourcePolicy.GetKey(dto)} already exists"); } }
public static Table TryGetTargetTable<T>( this IDynamoDBContext dynamoDBContext, DynamoDBOperationConfig operationConfig = null) { try { return dynamoDBContext.GetTargetTable<T>(operationConfig); } catch { return default(Table); } }
public async Task <PagedResult <Note> > GetByTargetIdAsync(GetNotesByTargetIdQuery query) { int pageSize = query.PageSize.HasValue ? query.PageSize.Value : MAX_RESULTS; var dbNotes = new List <NoteDb>(); var table = _dynamoDbContext.GetTargetTable <NoteDb>(); var queryConfig = new QueryOperationConfig { IndexName = GETNOTESBYTARGETIDINDEX, BackwardSearch = true, ConsistentRead = true, Limit = pageSize, PaginationToken = PaginationDetails.DecodeToken(query.PaginationToken), Filter = new QueryFilter(TARGETID, QueryOperator.Equal, query.TargetId) }; var search = table.Query(queryConfig); _logger.LogDebug($"Querying {queryConfig.IndexName} index for targetId {query.TargetId}"); var resultsSet = await search.GetNextSetAsync().ConfigureAwait(false); var paginationToken = search.PaginationToken; if (resultsSet.Any()) { dbNotes.AddRange(_dynamoDbContext.FromDocuments <NoteDb>(resultsSet)); // Look ahead for any more, but only if we have a token if (!string.IsNullOrEmpty(PaginationDetails.EncodeToken(paginationToken))) { queryConfig.PaginationToken = paginationToken; queryConfig.Limit = 1; search = table.Query(queryConfig); resultsSet = await search.GetNextSetAsync().ConfigureAwait(false); if (!resultsSet.Any()) { paginationToken = null; } } } return(new PagedResult <Note>(dbNotes.Select(x => x.ToDomain()), new PaginationDetails(paginationToken))); }
protected Repository(IDynamoDBContext context) { _context = context; _table = _context.GetTargetTable <TModel>(); }