public Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { return(Task.FromResult(PagedResult <DepositDetails> .Empty)); } var depositsBytes = _database.GetAll(); if (depositsBytes.Length == 0) { return(Task.FromResult(PagedResult <DepositDetails> .Empty)); } var deposits = new DepositDetails[depositsBytes.Length]; for (var i = 0; i < depositsBytes.Length; i++) { deposits[i] = Decode(depositsBytes[i]); } var filteredDeposits = deposits.AsEnumerable(); if (query.OnlyUnverified) { filteredDeposits = filteredDeposits.Where(d => d.VerificationTimestamp == 0); } return(Task.FromResult(filteredDeposits.OrderByDescending(d => d.Timestamp).Paginate(query))); }
public async Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { throw new ArgumentNullException(nameof(query)); } var depositsBytes = _database.GetAllValues().ToArray(); if (depositsBytes.Length == 0) { return(PagedResult <DepositDetails> .Empty); } DepositDetails[] deposits = new DepositDetails[depositsBytes.Length]; for (var i = 0; i < depositsBytes.Length; i++) { deposits[i] = Decode(depositsBytes[i]); } IEnumerable <DepositDetails> filteredDeposits = deposits.AsEnumerable(); if (query.OnlyPending) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected && !d.RefundClaimed && (d.Transaction?.State == TransactionState.Pending || d.ClaimedRefundTransaction?.State == TransactionState.Pending)); } if (query.OnlyUnconfirmed) { filteredDeposits = filteredDeposits.Where(d => d.ConfirmationTimestamp == 0 || d.Confirmations < d.RequiredConfirmations); } if (query.OnlyNotRejected) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected); } if (query.EligibleToRefund) { foreach (var deposit in deposits) { uint consumedUnits = await _depositUnitsCalculator.GetConsumedAsync(deposit); deposit.SetConsumedUnits(consumedUnits); } filteredDeposits = GetEligibleToRefund(filteredDeposits, query.CurrentBlockTimestamp); } return(filteredDeposits.OrderByDescending(d => d.Timestamp).ToArray().Paginate(query)); }
public async Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { return(PagedResult <DepositDetails> .Empty); } var deposits = Deposits.AsQueryable(); if (query.OnlyPending || query.OnlyUnconfirmed || query.OnlyNotRejected || query.EligibleToRefund) { //MongoDB unsupported predicate: (d.Confirmations < d.RequiredConfirmations) - maybe due to uint type? var allDeposits = await deposits.ToListAsync(); var filteredDeposits = allDeposits.AsEnumerable(); if (query.OnlyPending) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected && !d.RefundClaimed && (d.Transaction?.State == TransactionState.Pending || d.ClaimedRefundTransaction?.State == TransactionState.Pending)); } if (query.OnlyUnconfirmed) { filteredDeposits = filteredDeposits.Where(d => d.ConfirmationTimestamp == 0 || d.Confirmations < d.RequiredConfirmations); } if (query.OnlyNotRejected) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected); } if (query.EligibleToRefund) { foreach (var deposit in deposits) { uint consumedUnits = await _depositUnitsCalculator.GetConsumedAsync(deposit); deposit.SetConsumedUnits(consumedUnits); } filteredDeposits = filteredDeposits.Where(d => !d.RefundClaimed && (d.ConsumedUnits < d.Deposit.Units) && (!(d.EarlyRefundTicket is null) || query.CurrentBlockTimestamp >= d.Deposit.ExpiryTime )); } return(filteredDeposits.OrderByDescending(d => d.Timestamp).ToArray().Paginate(query)); } return(await deposits.OrderByDescending(d => d.Timestamp).PaginateAsync(query)); }
public async Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { PagedResult <DepositDetails> deposits = await _depositRepository.BrowseAsync(query); foreach (DepositDetails deposit in deposits.Items) { uint consumedUnits = await _depositUnitsCalculator.GetConsumedAsync(deposit); deposit.SetConsumedUnits(consumedUnits); } return(deposits); }
public Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { return(Task.FromResult(PagedResult <DepositDetails> .Empty)); } var depositsBytes = _database.GetAll(); if (depositsBytes.Length == 0) { return(Task.FromResult(PagedResult <DepositDetails> .Empty)); } var deposits = new DepositDetails[depositsBytes.Length]; for (var i = 0; i < depositsBytes.Length; i++) { deposits[i] = Decode(depositsBytes[i]); } var filteredDeposits = deposits.AsEnumerable(); if (query.OnlyPending) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected && !d.RefundClaimed && d.Transaction?.State == TransactionState.Pending || d.ClaimedRefundTransaction?.State == TransactionState.Pending); } if (query.OnlyUnconfirmed) { filteredDeposits = filteredDeposits.Where(d => d.ConfirmationTimestamp == 0 || d.Confirmations < d.RequiredConfirmations); } if (query.OnlyNotRejected) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected); } if (query.EligibleToRefund) { filteredDeposits = filteredDeposits.Where(d => !d.RefundClaimed && (!(d.EarlyRefundTicket is null) || query.CurrentBlockTimestamp >= d.Deposit.ExpiryTime)); } return(Task.FromResult(filteredDeposits.OrderByDescending(d => d.Timestamp).Paginate(query))); }
public async Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { return(PagedResult <DepositDetails> .Empty); } var deposits = Deposits.AsQueryable(); if (query.OnlyUnverified) { deposits = deposits.Where(d => d.VerificationTimestamp == 0); } return(await deposits.OrderByDescending(d => d.Timestamp).PaginateAsync(query)); }
public async Task get_deposits_should_return_paged_results_of_deposits() { var query = new GetDeposits(); _consumerService.GetDepositsAsync(query) .Returns(PagedResult <DepositDetails> .Create(new[] { GetDepositDetails() }, 1, 1, 1, 1)); var result = await _rpc.ndm_getDeposits(query); await _consumerService.Received().GetDepositsAsync(query); result.Data.Items.Should().ContainSingle(); result.Data.Page.Should().Be(1); result.Data.Results.Should().Be(1); result.Data.TotalPages.Should().Be(1); result.Data.TotalResults.Should().Be(1); result.Data.IsEmpty.Should().BeFalse(); VerifyDepositDetails(result.Data.Items.Single()); }
public async Task Can_browse_with_query_and_pagination() { IMongoDatabase database = MongoForTest.TempDb.GetDatabase(); var repo = new DepositDetailsMongoRepository(database); DepositDetails depositDetails = BuildDummyDepositDetails(); await repo.AddAsync(depositDetails); GetDeposits query = new GetDeposits(); query.OnlyUnconfirmed = true; query.OnlyNotRejected = true; query.OnlyPending = true; query.CurrentBlockTimestamp = 1; query.EligibleToRefund = true; query.Page = 0; query.Results = 10; await repo.BrowseAsync(query); }
public async Task <PagedResult <DepositDetails> > BrowseAsync(GetDeposits query) { if (query is null) { return(PagedResult <DepositDetails> .Empty); } var deposits = Deposits.AsQueryable(); if (query.OnlyUnconfirmed || query.OnlyNotRejected || query.EligibleToRefund) { //MongoDB unsupported predicate: (d.Confirmations < d.RequiredConfirmations) - maybe due to uint type? var allDeposits = await deposits.ToListAsync(); var filteredDeposits = allDeposits.AsEnumerable(); if (query.OnlyUnconfirmed) { filteredDeposits = filteredDeposits.Where(d => d.ConfirmationTimestamp == 0 || d.Confirmations < d.RequiredConfirmations); } if (query.OnlyNotRejected) { filteredDeposits = filteredDeposits.Where(d => !d.Rejected); } if (query.EligibleToRefund) { filteredDeposits = filteredDeposits.Where(d => !d.RefundClaimed && (!(d.EarlyRefundTicket is null) || query.CurrentBlockTimestamp >= d.Deposit.ExpiryTime )); } return(filteredDeposits.OrderByDescending(d => d.Timestamp).Paginate(query)); } return(await deposits.OrderByDescending(d => d.Timestamp).PaginateAsync(query)); }
public Task <PagedResult <DepositDetails> > GetDepositsAsync(GetDeposits query) => _depositManager.BrowseAsync(query);
public async Task <ResultWrapper <PagedResult <DepositDetailsForRpc> > > ndm_getDeposits(GetDeposits query) { var deposits = await _consumerService.GetDepositsAsync(query ?? new GetDeposits { Results = int.MaxValue }); return(ResultWrapper <PagedResult <DepositDetailsForRpc> > .Success(PagedResult <DepositDetailsForRpc> .From( deposits, deposits.Items.Select(d => new DepositDetailsForRpc(d)).ToArray()))); }