示例#1
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
        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));
        }
示例#7
0
        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());
        }
示例#8
0
        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);
        }
示例#9
0
        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));
        }
示例#10
0
 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())));
        }