public Task <PagedResult <DepositApproval> > BrowseAsync(GetConsumerDepositApprovals query)
        {
            if (query is null)
            {
                return(Task.FromResult(PagedResult <DepositApproval> .Empty));
            }

            var depositApprovalsBytes = _database.GetAll();

            if (depositApprovalsBytes.Length == 0)
            {
                return(Task.FromResult(PagedResult <DepositApproval> .Empty));
            }

            var depositApprovals = new DepositApproval[depositApprovalsBytes.Length];

            for (var i = 0; i < depositApprovalsBytes.Length; i++)
            {
                depositApprovals[i] = Decode(depositApprovalsBytes[i]);
            }

            var filteredDepositApprovals = depositApprovals.AsEnumerable();

            if (!(query.DataAssetId is null))
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.AssetId == query.DataAssetId);
            }

            if (!(query.Provider is null))
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.Provider == query.Provider);
            }

            if (query.OnlyPending)
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.State == DepositApprovalState.Pending);
            }

            return(Task.FromResult(filteredDepositApprovals.OrderByDescending(a => a.Timestamp).Paginate(query)));
        }
        public Task <PagedResult <DepositApproval> > BrowseAsync(GetConsumerDepositApprovals query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            byte[][] depositApprovalsBytes = _database.GetAllValues().ToArray();
            if (depositApprovalsBytes.Length == 0)
            {
                return(Task.FromResult(PagedResult <DepositApproval> .Empty));
            }

            DepositApproval[] depositApprovals = new DepositApproval[depositApprovalsBytes.Length];
            for (int i = 0; i < depositApprovalsBytes.Length; i++)
            {
                depositApprovals[i] = Decode(depositApprovalsBytes[i]);
            }

            IEnumerable <DepositApproval> filteredDepositApprovals = depositApprovals.AsEnumerable();

            if (!(query.DataAssetId is null))
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.AssetId == query.DataAssetId);
            }

            if (!(query.Provider is null))
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.Provider == query.Provider);
            }

            if (query.OnlyPending)
            {
                filteredDepositApprovals = filteredDepositApprovals.Where(a => a.State == DepositApprovalState.Pending);
            }

            return(Task.FromResult(filteredDepositApprovals.OrderByDescending(a => a.Timestamp).ToArray().Paginate(query)));
        }