Exemple #1
0
        public static async Task <PagedResult <T> > PaginateAsync <T>(this IMongoQueryable <T> collection, string orderBy,
                                                                      string sortOrder, int page = 1, int resultsPerPage = 10)
        {
            if (page <= 0)
            {
                page = 1;
            }

            if (resultsPerPage <= 0)
            {
                resultsPerPage = 10;
            }

            var isEmpty = await collection.AnyAsync() == false;

            if (isEmpty)
            {
                return(PagedResult <T> .Empty);
            }

            var totalResults = await collection.CountAsync();

            var totalPages = (int)Math.Ceiling((decimal)totalResults / resultsPerPage);

            List <T> data;

            if (string.IsNullOrWhiteSpace(orderBy))
            {
                data = await collection.Limit(page, resultsPerPage).ToListAsync();

                return(PagedResult <T> .Create(data, page, resultsPerPage, totalPages, totalResults));
            }

            if (sortOrder?.ToLowerInvariant() == "asc")
            {
                data = await collection.OrderBy(ToLambda <T>(orderBy)).Limit(page, resultsPerPage).ToListAsync();
            }
            else
            {
                data = await collection.OrderByDescending(ToLambda <T>(orderBy)).Limit(page, resultsPerPage)
                       .ToListAsync();
            }

            return(PagedResult <T> .Create(data, page, resultsPerPage, totalPages, totalResults));
        }
        public async Task search_todo_should_given_search_filter_should_return_data_based_on_paging_option_requested()
        {
            SearchTodo query = new SearchTodo {
                Title = "Title #1"
            };

            _todoRepository.GetAllAsync().Returns(todoList.AsQueryable());

            var filtered = todoList.Where(x => x.Title.Value.Contains(query.Title));

            var expected = PagedResult <Todo> .Create(filtered, 1, 10, 1, 4).Map(x => x.AsDto());

            var actuals = await _todosService.SearchAsync(query);

            _todoRepository.Received().GetAllAsync();

            expected.Items.Count().ShouldBe(actuals.Items.Count());
        }
Exemple #3
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());
        }
        public async Task search_todo_should_given_filter_should_return_data_based_on_paging_option_requested()
        {
            SearchTodo query = new SearchTodo {
                Page = 1, PageSize = 2
            };

            _todoRepository.GetAllAsync().Returns(todoList.AsQueryable());

            var filtered = todoList.Skip(0).Take(2);

            var expected = PagedResult <Todo> .Create(filtered, 1, 10, 2, 4).Map(x => x.AsDto());

            var actuals = await _todosService.SearchAsync(query);

            _todoRepository.Received().GetAllAsync();

            expected.Items.Count().ShouldBe(actuals.Items.Count());
        }
Exemple #5
0
        public async Task should_return_sum_of_consumed_units_for_confirmed_deposit_with_sessions_and_unit_unit_type()
        {
            var deposit  = GetDepositDetails();
            var sessions = new List <ConsumerSession>
            {
                GetConsumerSession(10),
                GetConsumerSession(20),
                GetConsumerSession(30)
            };
            var expectedConsumedUnits = (uint)sessions.Sum(s => s.ConsumedUnits);

            _sessionRepository.BrowseAsync(Arg.Any <GetConsumerSessions>())
            .Returns(PagedResult <ConsumerSession> .Create(sessions, 1, 1, 1, sessions.Count));

            var consumedUnits = await _calculator.GetConsumedAsync(deposit);

            consumedUnits.Should().Be(expectedConsumedUnits);
            await _sessionRepository.Received(1).BrowseAsync(Arg.Any <GetConsumerSessions>());
        }
        public async Task send_data_request_should_succeed_for_valid_deposit()
        {
            var depositId = Keccak.Zero;
            var deposit   = GetDepositDetails(DepositConfirmationTimestamp, DepositExpiryTime);

            _depositProvider.GetAsync(depositId).Returns(deposit);
            _wallet.IsUnlocked(deposit.Consumer).Returns(true);
            var provider = Substitute.For <INdmPeer>();

            _providerService.GetPeer(deposit.DataAsset.Provider.Address).Returns(provider);
            var sessions = new List <ConsumerSession>
            {
                GetConsumerSession()
            };
            var dataRequest = new DataRequest(Keccak.OfAnEmptyString, 1, 1, 1, Array.Empty <byte>(), Address.Zero,
                                              Address.Zero, null);
            var sessionsPagedResult = PagedResult <ConsumerSession> .Create(sessions, 1, 1, 1, 1);

            _sessionRepository.BrowseAsync(Arg.Any <GetConsumerSessions>()).Returns(sessionsPagedResult);
            _dataRequestFactory.Create(deposit.Deposit, deposit.DataAsset.Id, deposit.DataAsset.Provider.Address,
                                       deposit.Consumer, deposit.Pepper).Returns(dataRequest);
            var consumedUnits = (uint)sessions.Sum(s => s.ConsumedUnits);

            provider.SendDataRequestAsync(dataRequest, consumedUnits).Returns(DataRequestResult.DepositVerified);

            var result = await _dataRequestService.SendAsync(depositId);

            result.Should().Be(DataRequestResult.DepositVerified);
            await _depositProvider.Received(1).GetAsync(depositId);

            _wallet.Received(1).IsUnlocked(deposit.Consumer);
            await _kycVerifier.DidNotReceive().IsVerifiedAsync(deposit.DataAsset.Id, deposit.Consumer);

            _providerService.Received(1).GetPeer(deposit.DataAsset.Provider.Address);
            await _sessionRepository.Received(1).BrowseAsync(Arg.Any <GetConsumerSessions>());

            _dataRequestFactory.Received(1).Create(deposit.Deposit, deposit.DataAsset.Id,
                                                   deposit.DataAsset.Provider.Address, deposit.Consumer, deposit.Pepper);
            await provider.Received(1).SendDataRequestAsync(dataRequest, consumedUnits);

            await _consumerNotifier.Received(1).SendDataRequestResultAsync(depositId, result);
        }
        public static PagedResult <T> ToPagedResult <T>(this IEnumerable <T> collection, HttpResponseHeaders headers)
        {
            var items = collection?.ToArray() ?? Enumerable.Empty <T>().ToArray();

            if (items.Any() == false)
            {
                return(PagedResult <T> .Empty);
            }

            IEnumerable <string> xTotalCountHeaders;
            IEnumerable <string> linkHeaders;

            if (headers.TryGetValues("X-Total-Count", out xTotalCountHeaders) == false ||
                headers.TryGetValues("Link", out linkHeaders) == false)
            {
                return(items.PaginateWithoutLimit());
            }

            var totalResults    = xTotalCountHeaders.First();
            var totalResultsInt = int.Parse(totalResults);

            var link       = linkHeaders.First();
            var totalPages = int.Parse(GetValueFromLink(link, "last", "page"));

            var currentPage = 0;
            var nextPage    = GetValueFromLink(link, "next", "page");
            var prevPage    = GetValueFromLink(link, "prev", "page");

            if (nextPage != null)
            {
                currentPage = int.Parse(nextPage) - 1;
            }
            else if (prevPage != null)
            {
                currentPage = int.Parse(prevPage) + 1;
            }

            var resultsPerPage = int.Parse(GetValueFromLink(link, "first", "results"));

            return(PagedResult <T> .Create(items, currentPage, resultsPerPage, totalPages, totalResultsInt));
        }
        public PagedResult <Shelf> Get(int pageNumber, int pageSize, string fields, string orderBy, string orderDirection, string searchQuery)
        {
            using (IDbConnection db = new SqlConnection(_connectionString))
            {
                db.Open();

                string itemsQry = string.Format(@"Select * from Shelves Order by {0} {1} 
                                                Offset (@RowsPerPage * (@PageNumber - 1)) rows Fetch next @RowsPerPage rows only", orderBy, orderDirection);

                string            countQry          = @"SELECT count(*) FROM Shelves";
                DynamicParameters dynamicParameters = new DynamicParameters();
                dynamicParameters.Add("RowsPerPage", pageSize);
                dynamicParameters.Add("PageNumber", pageNumber);
                dynamicParameters.Add("TotalCount", ParameterDirection.Output);

                var shelves    = db.Query <Shelf>(itemsQry, dynamicParameters).ToList();
                var totalCount = db.Query <int>(countQry, dynamicParameters).Single();

                return(PagedResult <Shelf> .Create(shelves, totalCount, pageNumber, pageSize));
            }
        }
Exemple #9
0
        private void ConfigureMocks(TestConsumer consumer)
        {
            var depositId = consumer.DepositId;

            _consumerRepository.GetAsync(depositId).Returns(consumer.Consumer);

            _paymentClaimRepository.BrowseAsync(Arg.Any <GetPaymentClaims>())
            .Returns(PagedResult <PaymentClaim> .Empty);

            _sessionRepository.BrowseAsync(new GetProviderSessions
            {
                DepositId = depositId
            })
            .Returns(PagedResult <ProviderSession> .Create(new List <ProviderSession>(consumer.Sessions), 1, 1, 1, 1));

            _receiptsPolicies.CanRequestReceipts(Arg.Any <long>(), Arg.Any <UInt256>()).Returns(true);

            _sessionManager.GetConsumerNodes(depositId).Returns(consumer.Nodes.Select(n => n.Node).ToArray());

            _receiptProcessor.TryProcessAsync(Arg.Any <ProviderSession>(), _consumer, Arg.Any <INdmProviderPeer>(),
                                              Arg.Any <DataDeliveryReceiptRequest>(), Arg.Any <DataDeliveryReceipt>()).Returns(true);
        }
Exemple #10
0
        public static async Task<PagedResult<T>> PaginateAsync<T>(this IMongoQueryable<T> collection,
            int page = 1, int resultsPerPage = 10)
        {
            if (page <= 0)
            {
                page = 1;
            }
            if (resultsPerPage <= 0)
            {
                resultsPerPage = 10;
            }
            var isEmpty = await collection.AnyAsync() == false;
            if (isEmpty)
            {
                return PagedResult<T>.Empty;
            }
            var totalResults = await collection.CountAsync();
            var totalPages = (int)Math.Ceiling((decimal)totalResults / resultsPerPage);
            var data = await collection.Limit(page, resultsPerPage).ToListAsync();

            return PagedResult<T>.Create(data, page, resultsPerPage, totalPages, totalResults);
        }
        public static PagedResult <T> Paginate <T>(this IEnumerable <T> collection, int page = 1, int resultsPerPage = 10)
        {
            if (page <= 0)
            {
                page = 1;
            }
            if (resultsPerPage <= 0)
            {
                resultsPerPage = 10;
            }
            var isEmpty = !collection.Any();

            if (isEmpty)
            {
                return(PagedResult <T> .Empty);
            }
            var totalResults = collection.Count();
            var totalPages   = (int)Math.Ceiling((decimal)totalResults / resultsPerPage);
            var data         = collection.Limit(page, resultsPerPage).ToList();

            return(PagedResult <T> .Create(data, page, resultsPerPage, totalPages, totalResults));
        }
Exemple #12
0
        public static PagedResult<T> Paginate<T>(this IQueryable<T> source, Paging paging)
        {
            var isEmpty = source == null || !source.Any();
            if (isEmpty)
                return PagedResult<T>.Empty;

            var totalResults = source.Count();

            if (paging == null)
                return PagedResult<T>.Create(source.ToList(), 1, totalResults, 1, totalResults);

            if (paging.Page <= 0)
                paging.Page = 1;

            if (paging.PageSize <= 0)
                paging.PageSize = 10;

            var totalPages = (int)Math.Ceiling((double)totalResults / paging.PageSize);
            var data = source.Skip((paging.Page - 1) * paging.PageSize).Take(paging.PageSize).ToList();

            return PagedResult<T>.Create(data, paging.Page, paging.PageSize, totalPages, totalResults);
        }
Exemple #13
0
        public static async Task <PagedResult <T> > PaginateAsync <T>(this IMongoQueryable <T> collection,
                                                                      int currentPage = 1, int pageSize = 5)
        {
            if (currentPage <= 0)
            {
                currentPage = 1;
            }

            if (pageSize <= 0)
            {
                pageSize = 5;
            }

            if (pageSize > 15)
            {
                pageSize = 15;
            }

            var isEmpty = await collection.AnyAsync() == false;

            if (isEmpty)
            {
                return(PagedResult <T> .Empty);
            }

            var totalResults = await collection.CountAsync();

            var totalPages = (int)Math.Ceiling((decimal)totalResults / pageSize);

            if (currentPage > totalPages)
            {
                currentPage = totalPages;
            }

            var paginatedSource = await collection.Limit(currentPage, pageSize).ToListAsync();

            return(PagedResult <T> .Create(paginatedSource, currentPage, pageSize, totalPages, totalResults));
        }
Exemple #14
0
        public static async Task <PagedResult <T> > PaginateAsync <T, TKey>(this IMongoQueryable <T> collection, int resultsPerPage = 10)
            where T : IIdentifiable <TKey>
        {
            if (resultsPerPage <= 0)
            {
                resultsPerPage = 10;
            }

            var result = await collection
                         .Take(resultsPerPage + 1)
                         .ToListAsync();

            var hasNextData = result.Count > resultsPerPage;

            if (result.Count > 1 && hasNextData)
            {
                result.RemoveAt(result.Count - 1);
            }

            var last = result.LastOrDefault();

            return(PagedResult <T> .Create(result, result.Count, last?.Id.ToString(), hasNextData));
        }
Exemple #15
0
        // If all units are consumed, background processor should not try to refund this deposit.
        // Consumed units are not set in databases - they are calculated by DepositUnitsCalculator,
        // so we need to remember to always calculate consumed units after reading them from DB
        public void Will_not_try_to_refund_consumed_deposit()
        {
            _processor.Init();
            var blockProccesed = Build.A.Block.TestObject;

            var consumedDeposit        = new Deposit(Keccak.Zero, 10, 1, 1);
            var consumedDepositDetails = new DepositDetails(consumedDeposit, null, null, null, 1, null);

            consumedDepositDetails.SetConsumedUnits(10);

            var refundsResult = PagedResult <DepositDetails> .Create(
                new List <DepositDetails> {
                consumedDepositDetails
            },
                1,
                1,
                1,
                1);

            _depositRepository.BrowseAsync(Arg.Any <GetDeposits>()).Returns(Task.FromResult(refundsResult));
            _blockProcessor.BlockProcessed += Raise.EventWith(new BlockProcessedEventArgs(blockProccesed, Array.Empty <TxReceipt>()));
            _consumerNotifier.DidNotReceive().SendClaimedRefundAsync(Arg.Any <Keccak>(), Arg.Any <string>(), Arg.Any <Keccak>());
        }
Exemple #16
0
        public static async Task <PagedResult <T> > PaginateAsync <T>(this IQueryable <T> collection,
                                                                      int page = 1, int resultsPerPage = 10)
        {
            if (page <= 0)
            {
                page = 1;
            }
            if (resultsPerPage <= 0)
            {
                resultsPerPage = 10;
            }
            var isEmpty = collection.Any() == false;

            if (isEmpty)
            {
                return(PagedResult <T> .Empty);
            }
            var totalResults = collection.Count();
            var totalPages   = (int)Math.Ceiling((decimal)totalResults / resultsPerPage);
            var data         = collection.Take(resultsPerPage).Skip(page * resultsPerPage).ToList();

            return(PagedResult <T> .Create(data, page, resultsPerPage, totalPages, totalResults));
        }
Exemple #17
0
        public MaterialActor(MaterialRepository materialRepository, IMapper mapper)
        {
            _materialRepository = materialRepository;
            _mapper             = mapper;

            ReceiveAsync <CreateMaterialBindingModel>(async command =>
            {
                Sender.Tell(await _materialRepository.AddAsync(_mapper.Map <Domain.Material>(command)));
            });

            ReceiveAsync <UpdateMaterialBindingModel>(async command =>
            {
                await _materialRepository.UpdateAsync(_mapper.Map <Domain.Material>(command));
                Sender.Tell("Done!");
            });

            ReceiveAsync <DeleteMaterialCommand>(async command =>
            {
                await _materialRepository.DeleteAsync(command.Id);
                Sender.Tell("Done!");
            });

            ReceiveAsync <GetMaterialByIdCommand>(async command =>
            {
                Sender.Tell(_mapper.Map <GetMaterialResponseModel>(await _materialRepository.GetAsync(command.Id)));
            });

            ReceiveAsync <SearchMaterialByNameQueryModel>(async command =>
            {
                var result = await _materialRepository.SearchByNameAsync(command);
                Sender.Tell(PagedResult <GetMaterialResponseModel>
                            .Create(result.data.Select(x => _mapper.Map <GetMaterialResponseModel>(x)).ToList(),
                                    command.Page, command.Results,
                                    Convert.ToInt32(Math.Ceiling((double)result.statistics.TotalResults / command.Results)),
                                    result.statistics.TotalResults));
            });
        }
        protected static void Initialize()
        {
            UserId                      = "userId";
            Username                    = "******";
            Email                       = "*****@*****.**";
            ExternalId                  = "externalId";
            Provider                    = Providers.Collectively;
            Password                    = "******";
            Hash                        = "hash";
            Role                        = Roles.User;
            UserRepositoryMock          = new Mock <IUserRepository>();
            EncrypterMock               = new Mock <IEncrypter>();
            SecuredOperationServiceMock = new Mock <IOneTimeSecuredOperationService>();
            UserService                 = new UserService(UserRepositoryMock.Object,
                                                          EncrypterMock.Object, SecuredOperationServiceMock.Object);
            User  = new User(UserId, Email, Role, Provider);
            Query = new BrowseUsers();
            Users = PagedResult <User> .Create(new [] { User }, 1, 1, 1, 1);

            EncrypterMock.Setup(x => x.GetSalt(Moq.It.IsAny <string>())).Returns("salt");
            EncrypterMock
            .Setup(x => x.GetHash(Moq.It.IsAny <string>(), Moq.It.IsAny <string>()))
            .Returns(Hash);
        }
Exemple #19
0
        public static async Task <PagedResult <Remark> > QueryAsync(this IMongoCollection <Remark> remarks,
                                                                    BrowseRemarks query)
        {
            if (query.Page <= 0)
            {
                query.Page = 1;
            }
            if (query.Results <= 0)
            {
                query.Results = 10;
            }

            var filter     = FilterDefinition <Remark> .Empty;
            var totalCount = await remarks.CountAsync(filter);

            var totalPages = (int)totalCount / query.Results + 1;

            var result = await remarks.Find(filter)
                         .Skip(query.Results * (query.Page - 1))
                         .Limit(query.Results)
                         .ToListAsync();

            return(PagedResult <Remark> .Create(result, query.Page, query.Results, totalPages, totalCount));
        }
Exemple #20
0
        public void AbsenceDaysCannotBookTests(AbsenceRange absenceRange, WorkingPattern workingPattern, IEnumerable <PublicHoliday> publicHolidays, IEnumerable <AbsenceDay> alreadyBookedAbsenceDays, IEnumerable <INotAbsenceDay> expectedAbsenceDays)
        {
            // Arrange
            _mockHRDataService.Setup(m => m.RetrievePublicHolidays(It.IsAny <Int32>(), It.IsAny <Int32>(), It.IsAny <Expression <Func <PublicHoliday, bool> > >(), It.IsAny <List <OrderBy> >(), It.IsAny <Paging>())).Returns(PagedResult <PublicHoliday> .Create(publicHolidays, 1, publicHolidays.Count(), 1, publicHolidays.Count()));
            _mockHRDataService.Setup(m => m.RetrieveAbsenceRangeBookedAbsenceDays(It.IsAny <AbsenceRange>()))
            .Returns(alreadyBookedAbsenceDays);
            // Act
            var actualAbsenceDays = _hrBusinessService.RetrieveCannotBeBookedDays(absenceRange, workingPattern);

            // Assert
            actualAbsenceDays.ShouldBeEquivalentTo(expectedAbsenceDays);
            _mockHRDataService.Verify(m => m.RetrievePublicHolidays(It.IsAny <Int32>(), It.IsAny <Int32>(), It.IsAny <Expression <Func <PublicHoliday, bool> > >(), It.IsAny <List <OrderBy> >(), It.IsAny <Paging>()), Times.Once);
            _mockHRDataService.Verify(m => m.RetrieveAbsenceRangeBookedAbsenceDays(It.IsAny <AbsenceRange>()), Times.Once);
        }
        public static async Task <PagedResult <Remark> > QueryAsync(this IMongoCollection <Remark> remarks,
                                                                    BrowseRemarks query)
        {
            if (!query.IsLocationProvided() && query.AuthorId.Empty() && query.ResolverId.Empty())
            {
                query.Latest = true;
            }
            if (query.Page <= 0)
            {
                query.Page = 1;
            }
            if (query.Results <= 0)
            {
                query.Results = 10;
            }
            if (query.Results > 1000)
            {
                query.Results = 1000;
            }
            var filterBuilder = new FilterDefinitionBuilder <Remark>();
            var filter        = FilterDefinition <Remark> .Empty;

            if (query.IsLocationProvided() && !query.SkipLocation)
            {
                var maxDistance = query.Radius > 0 ? (double?)query.Radius / 1000 / 6378.1 : null;
                filter = filterBuilder.NearSphere(x => x.Location,
                                                  query.Longitude, query.Latitude, maxDistance);
            }
            if (query.AuthorId.NotEmpty())
            {
                filter = filter & filterBuilder.Where(x => x.Author.UserId == query.AuthorId);
                if (query.OnlyLiked)
                {
                    filter = filter & filterBuilder.Where(x => x.Votes.Any(v => v.UserId == query.AuthorId && v.Positive));
                }
                else if (query.OnlyDisliked)
                {
                    filter = filter & filterBuilder.Where(x => x.Votes.Any(v => v.UserId == query.AuthorId && !v.Positive));
                }
            }
            if (query.ResolverId.NotEmpty())
            {
                filter = filter & filterBuilder.Where(x => x.State.State == "resolved" &&
                                                      x.State.User.UserId == query.ResolverId);
            }
            if (!query.Description.Empty())
            {
                filter = filter & filterBuilder.Where(x => x.Description.Contains(query.Description));
            }
            if (query.Categories?.Any() == true)
            {
                filter = filter & filterBuilder.Where(x => query.Categories.Contains(x.Category.Name));
            }
            if (query.Tags?.Any() == true)
            {
                filter = filter & filterBuilder.Where(x => x.Tags.Any(y => query.Tags.Contains(y)));
            }
            if (query.States?.Any() == true)
            {
                filter = filter & filterBuilder.Where(x => query.States.Contains(x.State.State));
            }
            if (!query.Disliked)
            {
                filter = filter & filterBuilder.Where(x => x.Rating > NegativeVotesThreshold);
            }
            if (query.GroupId.HasValue && query.GroupId != Guid.Empty)
            {
                filter = filter & filterBuilder.Where(x => x.Group.Id == query.GroupId);
            }
            if (query.UserFavorites.NotEmpty())
            {
                filter = filterBuilder.Where(x => x.UserFavorites.Contains(query.UserFavorites));
            }

            var totalCount = await remarks.CountAsync(_ => true);

            var filteredRemarks = remarks.Find(filter);
            var totalPages      = (int)totalCount / query.Results + 1;
            var findResult      = filteredRemarks
                                  .Skip(query.Results * (query.Page - 1))
                                  .Limit(query.Results);

            findResult = SortRemarks(query, findResult);
            var result = await findResult.ToListAsync();

            return(PagedResult <Remark> .Create(result, query.Page, query.Results, totalPages, totalCount));
        }
Exemple #22
0
        public async Task <DepositsReport> GetAsync(GetDepositsReport query)
        {
            var deposits = query.DepositId is null
                ? await _depositRepository.BrowseAsync(new GetDeposits
            {
                Results = int.MaxValue
            })
                : PagedResult <DepositDetails> .Create(new[] { await _depositRepository.GetAsync(query.DepositId) },
                                                       1, 1, 1, 1);

            if (!deposits.Items.Any() || deposits.Items.Any(d => d is null))
            {
                return(DepositsReport.Empty);
            }

            var foundDeposits = deposits.Items
                                .Where(d => (query.Provider is null || d.DataAsset.Provider.Address == query.Provider) &&
                                       (query.AssetId is null || d.DataAsset.Id == query.AssetId))
                                .ToDictionary(d => d.Id, d => d);

            if (!foundDeposits.Any())
            {
                return(DepositsReport.Empty);
            }

            var assetIds = foundDeposits.Select(d => d.Value.DataAsset.Id);
            var receipts = await _receiptRepository.BrowseAsync(query.DepositId, query.AssetId);

            var depositsReceipts = receipts.Where(r => assetIds.Contains(r.DataAssetId))
                                   .GroupBy(r => r.DepositId).ToDictionary(r => r.Key, r => r.AsEnumerable());

            var page = query.Page;

            if (page <= 0)
            {
                page = 1;
            }

            var results = query.Results;

            if (results <= 0)
            {
                results = 10;
            }

            var timestamp = (uint)_timestamper.EpochSeconds;
            var skip      = (page - 1) * results;
            var items     = new List <DepositReportItem>();

            foreach (var(_, deposit) in foundDeposits.OrderByDescending(d => d.Value.Timestamp).Skip(skip)
                     .Take(results))
            {
                depositsReceipts.TryGetValue(deposit.Id, out var depositReceipts);
                var expired      = deposit.IsExpired(timestamp);
                var receiptItems = depositReceipts?.Select(r => new DataDeliveryReceiptReportItem(r.Id, r.Number,
                                                                                                  r.SessionId, r.ConsumerNodeId, r.Request, r.Receipt, r.Timestamp, r.IsMerged, r.IsClaimed));
                var sessions = await _sessionRepository.BrowseAsync(new GetConsumerSessions
                {
                    DepositId = deposit.Id,
                    Results   = int.MaxValue
                });

                var consumedUnits = sessions.Items.Any() ? (uint)sessions.Items.Sum(s => s.ConsumedUnits) : 0;
                items.Add(new DepositReportItem(deposit.Id, deposit.DataAsset.Id, deposit.DataAsset.Name,
                                                deposit.DataAsset.Provider.Address, deposit.DataAsset.Provider.Name, deposit.Deposit.Value,
                                                deposit.Deposit.Units, deposit.Consumer, deposit.Timestamp, deposit.Deposit.ExpiryTime, expired,
                                                deposit.Transaction?.Hash, deposit.ConfirmationTimestamp, deposit.Confirmations,
                                                deposit.RequiredConfirmations, deposit.Confirmed, deposit.Rejected,
                                                deposit.ClaimedRefundTransaction?.Hash, deposit.RefundClaimed, consumedUnits, receiptItems));
            }

            var(total, claimed, refunded) = CalculateValues(foundDeposits, depositsReceipts);
            var totalResults = foundDeposits.Count;
            var totalPages   = (int)Math.Ceiling((double)totalResults / query.Results);

            return(new DepositsReport(total, claimed, refunded,
                                      PagedResult <DepositReportItem> .Create(items.OrderByDescending(i => i.Timestamp).ToList(),
                                                                              query.Page, query.Results, totalPages, totalResults)));
        }
        public PagedResult <Product> Get(int pageNumber, int pageSize, string fields, string orderBy, string orderDirection, string searchQuery)
        {
            using (IDbConnection db = new SqlConnection(_connectionString))
            {
                db.Open();

                //string itemsQry = string.Format(@"Select Products.Id,
                //                                        Products.Name,
                //                                        Products.ShelfId,
                //                                        Shelves.Id,
                //                                        Shelves.Name,
                //                                        Shelves.ShelfCode
                //                                        from Products as Products
                //                                            join Shelves as Shelves on Products.ShelfId  = Shelves.Id
                //                                Order by Products.{0} {1}
                //                                Offset (@RowsPerPage * (@PageNumber - 1)) rows Fetch next @RowsPerPage rows only", orderBy, orderDirection);

                string itemsQry = string.Format(@"Select p.*,
		                                            s.Id as Id, 
		                                            s.Name, 
		                                            s.ShelfCode,
		                                            pa.Id as Id,
		                                            pa.ActivityType,
		                                            pa.ProductId,
		                                            pa.Total,
		                                            pa.AuditById,
		                                            pa.Date
		                                                from Products as p
		                                                left join Shelves as s on p.ShelfId  = s.Id
		                                                left join ProductActivities as pa on p.Id = pa.ProductId
                                                Order by p.{0} {1} 
                                                Offset (@RowsPerPage * (@PageNumber - 1)) rows Fetch next @RowsPerPage rows only", orderBy, orderDirection);

                string            countQry          = @"SELECT count(*) FROM Products";
                DynamicParameters dynamicParameters = new DynamicParameters();
                dynamicParameters.Add("RowsPerPage", pageSize);
                dynamicParameters.Add("PageNumber", pageNumber);
                dynamicParameters.Add("TotalCount", ParameterDirection.Output);

                var products = db.Query <Product, Shelf, ProductActivity, Product>(itemsQry,
                                                                                   (p, s, pa) => {
                    p.Shelf = s;

                    if (p.ProductActivities == null)
                    {
                        p.ProductActivities = new List <ProductActivity>();
                    }

                    if (pa != null)
                    {
                        p.ProductActivities.Add(pa);
                    }

                    return(p);
                },
                                                                                   dynamicParameters)
                               .ToList();
                var totalCount = db.Query <int>(countQry, dynamicParameters).Single();

                return(PagedResult <Product> .Create(products, totalCount, pageNumber, pageSize));
            }
        }
Exemple #24
0
 public static PagedResult <T> ToPagedResult <T>(this IQueryable <T> list, IRequestParameters <T> request) where T : Entity
 {
     return(PagedResult <T> .Create(list, request));
 }
Exemple #25
0
 private static async Task <IPagedResult <T> > GetPageAsync <T>(IQueryable <T> results, int pageSize, int pageOffset) where T : IEntity
 {
     return(PagedResult <T> .Create(results.Skip(pageOffset).Take(pageSize), await results.CountAsync()));
 }
        public static PagedResult <TDestination> MapToPagedResult <TDestination>(this IMapper mapper, PagedResultBase source)
        {
            var listDest = mapper.MapToList <TDestination>(source.GetEnumerableItems());

            return(PagedResult <TDestination> .Create(listDest, source.CurrentPage, source.ResultsPerPage, source.TotalPages, source.TotalResults));
        }
Exemple #27
0
        public async Task <DepositsReport> GetAsync(GetDepositsReport query)
        {
            PagedResult <DepositDetails> deposits;

            if (query.DepositId == null)
            {
                deposits =
                    await _depositRepository.BrowseAsync(new GetDeposits
                {
                    Results = int.MaxValue
                });
            }
            else
            {
                DepositDetails?detailsOfOne = await _depositRepository.GetAsync(query.DepositId);

                if (detailsOfOne is null)
                {
                    return(DepositsReport.Empty);
                }

                deposits = PagedResult <DepositDetails> .Create(new[] { detailsOfOne },
                                                                1, 1, 1, 1);
            }

            if (deposits.Items.Count == 0)
            {
                return(DepositsReport.Empty);
            }

            if (!deposits.Items.Any() || deposits.Items.Any(d => d is null))
            {
                return(DepositsReport.Empty);
            }

            Dictionary <Keccak, DepositDetails> foundDeposits = deposits.Items
                                                                .Where(d => (query.Provider is null || d.DataAsset.Provider.Address == query.Provider) &&
                                                                       (query.AssetId is null || d.DataAsset.Id == query.AssetId))
                                                                .ToDictionary(d => d.Id, d => d);

            if (!foundDeposits.Any())
            {
                return(DepositsReport.Empty);
            }

            IEnumerable <Keccak> assetIds = foundDeposits.Select(d => d.Value.DataAsset.Id);
            IReadOnlyList <DataDeliveryReceiptDetails> receipts = await _receiptRepository.BrowseAsync(query.DepositId, query.AssetId);

            Dictionary <Keccak, IEnumerable <DataDeliveryReceiptDetails> > depositsReceipts = receipts.Where(r => assetIds.Contains(r.DataAssetId))
                                                                                              .GroupBy(r => r.DepositId).ToDictionary(r => r.Key, r => r.AsEnumerable());

            int page = query.Page;

            if (page <= 0)
            {
                page = 1;
            }

            int results = query.Results;

            if (results <= 0)
            {
                results = 10;
            }

            uint timestamp = (uint)_timestamper.EpochSeconds;
            int  skip      = (page - 1) * results;
            List <DepositReportItem> items = new List <DepositReportItem>();

            foreach ((Keccak _, DepositDetails deposit) in foundDeposits.OrderByDescending(d => d.Value.Timestamp).Skip(skip)
                     .Take(results))
            {
                depositsReceipts.TryGetValue(deposit.Id, out IEnumerable <DataDeliveryReceiptDetails>?depositReceipts);
                bool expired = deposit.IsExpired(timestamp);
                IEnumerable <DataDeliveryReceiptReportItem>?receiptItems = depositReceipts?.Select(r => new DataDeliveryReceiptReportItem(r.Id, r.Number,
                                                                                                                                          r.SessionId, r.ConsumerNodeId, r.Request, r.Receipt, r.Timestamp, r.IsMerged, r.IsClaimed));
                PagedResult <ConsumerSession> sessions = await _sessionRepository.BrowseAsync(new GetConsumerSessions
                {
                    DepositId = deposit.Id,
                    Results   = int.MaxValue
                });

                uint consumedUnits = sessions.Items.Any() ? (uint)sessions.Items.Sum(s => s.ConsumedUnits) : 0;
                items.Add(ToReportItem(deposit, expired, consumedUnits, receiptItems ?? Enumerable.Empty <DataDeliveryReceiptReportItem>()));
            }

            (UInt256 total, UInt256 claimed, UInt256 refunded) = CalculateValues(foundDeposits, depositsReceipts);
            int totalResults = foundDeposits.Count;
            int totalPages   = (int)Math.Ceiling((double)totalResults / query.Results);

            return(new DepositsReport(total, claimed, refunded,
                                      PagedResult <DepositReportItem> .Create(items.OrderByDescending(i => i.Timestamp).ToList(),
                                                                              query.Page, query.Results, totalPages, totalResults)));
        }