Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
 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
     });
 }