public async Task SaveAsync(InternalMessageModel internalMessageModel) { InternalMessageEntity internalMessageEntity = _mapper.Map <InternalMessageEntity>(internalMessageModel); await _collection.DeleteOneAsync((x) => x.TransactionHash == internalMessageEntity.TransactionHash && x.MessageIndex == internalMessageModel.MessageIndex); await _collection.InsertOneAsync(internalMessageEntity); }
public async Task <IEnumerable <InternalMessageModel> > GetAllByFilterAsync(InternalMessageQuery internalMessageQuery) { List <InternalMessageModel> result = new List <InternalMessageModel>(); var filterBuilder = Builders <InternalMessageEntity> .Filter; var filter = Builders <InternalMessageEntity> .Filter.Empty; if (!string.IsNullOrEmpty(internalMessageQuery.FromAddress)) { FilterDefinition <InternalMessageEntity> filterFrom = filterBuilder.Eq(x => x.FromAddress, internalMessageQuery.FromAddress); filter = filter & filterFrom; } if (!string.IsNullOrEmpty(internalMessageQuery.ToAddress)) { FilterDefinition <InternalMessageEntity> filterTo = filterBuilder.Eq(x => x.ToAddress, internalMessageQuery.ToAddress); filter = internalMessageQuery.FromAddress == internalMessageQuery.ToAddress ? filter | filterTo : filter & filterTo; } if (internalMessageQuery.StartBlock.HasValue) { FilterDefinition <InternalMessageEntity> filterStartBlock = filterBuilder.Gte(x => x.BlockNumber, internalMessageQuery.StartBlock.Value); filter = filter & filterStartBlock; } if (internalMessageQuery.StopBlock.HasValue) { FilterDefinition <InternalMessageEntity> filterEndBlock = filterBuilder.Lte(x => x.BlockNumber, internalMessageQuery.StopBlock.Value); filter = filter & filterEndBlock; } var sort = Builders <InternalMessageEntity> .Sort .Descending(x => x.BlockNumber) .Ascending(x => x.TransactionHash) .Ascending(x => x.MessageIndex); MongoDB.Driver.IFindFluent <InternalMessageEntity, InternalMessageEntity> search = _collection.Find(filter); search = search.Sort(sort); internalMessageQuery.Start = internalMessageQuery.Start.HasValue ? internalMessageQuery.Start : 0; internalMessageQuery.Count = internalMessageQuery.Count.HasValue && internalMessageQuery.Count != 0 ? internalMessageQuery.Count : (int)await search.CountAsync(); search = search.Skip(internalMessageQuery.Start).Limit(internalMessageQuery.Count); result = new List <InternalMessageModel>(internalMessageQuery.Count.Value); IAsyncCursor <InternalMessageEntity> cursor = await search.ToCursorAsync(); await cursor.ForEachAsync((internalMessage) => { InternalMessageModel internalMessageModel = _mapper.Map <InternalMessageModel>(internalMessage); result.Add(internalMessageModel); }); return(result); }
public async Task <IEnumerable <InternalMessageModel> > GetAsync(string transactionHash) { List <InternalMessageModel> result = new List <InternalMessageModel>(); var filter = Builders <InternalMessageEntity> .Filter.Eq(x => x.TransactionHash, transactionHash); IAsyncCursor <InternalMessageEntity> cursor = await _collection.FindAsync(filter); await cursor.ForEachAsync((internalMessage) => { InternalMessageModel internalMessageModel = _mapper.Map <InternalMessageModel>(internalMessage); result.Add(internalMessageModel); }); return(result); }
private static InternalMessageResponse MapInternalMessageModelToResponse(InternalMessageModel message) { return(new InternalMessageResponse() { BlockNumber = message.BlockNumber, Depth = message.Depth, FromAddress = message.FromAddress, MessageIndex = message.MessageIndex, ToAddress = message.ToAddress, TransactionHash = message.TransactionHash, Type = message.Type, Value = message.Value.ToString(), BlockTimestamp = message.BlockTimestamp, BlockTimeUtc = message.BlockTimeUtc }); }