public Task <TransfersGetResponse> Get(TransfersGetRequest request) { return(this.m_TransactionsManager.GetTransfersAsync(request)); }
public async Task <TransfersGetResponse> GetTransfersAsync( TransfersGetRequest request) { int?limit = request.Limit; if (!limit.HasValue) { request.Limit = new int?(10); } else { limit = request.Limit; if (limit.Value > 1000) { request.Limit = new int?(1000); } } Dictionary <string, string> andSource = new Dictionary <string, string>(); Dictionary <string, string> orSource = new Dictionary <string, string>(); andSource.Add("status", "executed"); if (!string.IsNullOrEmpty(request.Contract)) { andSource.Add("account", request.Contract); } if (!string.IsNullOrEmpty(request.Action)) { andSource.Add("name", request.Action); } if (!string.IsNullOrEmpty(request.Owner)) { switch (request.Type) { case TransferType.All: orSource.Add("data.from", request.Owner); orSource.Add("data.to", request.Owner); break; case TransferType.Send: andSource.Add("data.from", request.Owner); break; case TransferType.Receive: andSource.Add("data.to", request.Owner); break; default: break; } } if (!string.IsNullOrEmpty(request.TrxId)) { andSource.Add("trx_id", request.TrxId); } IMongoCollection <TrxAction> collection = this.m_MongoDatabase.GetCollection <TrxAction>(this.m_TransferCollectionName, (MongoCollectionSettings)null); FilterDefinitionBuilder <TrxAction> builderFilter = Builders <TrxAction> .Filter; List <TrxAction> actions; long total; if (andSource.Count == 0 && orSource.Count == 0) { actions = await collection.Find <TrxAction>(builderFilter.Empty, (FindOptions)null).Sort(Builders <TrxAction> .Sort.Descending((FieldDefinition <TrxAction>) "_id")).Skip(request.Skip).Limit(request.Limit).ToListAsync <TrxAction>(new CancellationToken()); total = await collection.CountDocumentsAsync(builderFilter.Empty, (CountOptions)null, new CancellationToken()); } else { FilterDefinition <TrxAction> allFilters = null; if (andSource.Count > 0 && orSource.Count > 0) { FilterDefinition <TrxAction> orFilters = builderFilter.Or(orSource.Select(f => builderFilter.Eq <string>(f.Key, f.Value))); FilterDefinition <TrxAction> andFilters = builderFilter.And(andSource.Select(f => builderFilter.Eq <string>(f.Key, f.Value))); allFilters = builderFilter.And(new[] { andFilters, orFilters }); } else if (andSource.Count > 0) { allFilters = builderFilter.And(andSource.Select(f => builderFilter.Eq <string>(f.Key, f.Value))); } else { allFilters = builderFilter.Or(orSource.Select(f => builderFilter.Eq <string>(f.Key, f.Value))); } actions = await collection.Find <TrxAction>(allFilters, (FindOptions)null).Sort(Builders <TrxAction> .Sort.Descending((FieldDefinition <TrxAction>) "block_num")).Skip(request.Skip).Limit(request.Limit).ToListAsync <TrxAction>(new CancellationToken()); total = await collection.CountDocumentsAsync(allFilters, (CountOptions)null, new CancellationToken()); } long irreversibleBlockNumAsync = await this.m_ABIService.GetLastIrreversibleBlockNumAsync(); return(new TransfersGetResponse() { Actions = (IEnumerable <TrxAction>)actions, Total = total, LastIrreversibleBlock = irreversibleBlockNumAsync }); }