public async Task <PagedList <ManagersViewModel> > GetManagers(ManagersPagingParameters managersPagingParameters)
        {
            var list = await PagedList <ManagersViewModel> .ToPagedList(
                this.context.Managers.Where(m => m.Id >= managersPagingParameters.MinId).OrderBy(m => m.Id).ProjectTo <ManagersViewModel>(this.mapper.ConfigurationProvider),
                managersPagingParameters.PageNumber,
                managersPagingParameters.PageSize);

            return(list);
        }
        public async Task TestGetManagersAsync()
        {
            var dbContext          = DbContextMocker.GetContext(nameof(this.TestGetManagersAsync));
            var managersRepository = new ManagersRepository(dbContext, AutoMapperConfiguration.ConfigureForWeb().CreateMapper());
            var managersService    = new ManagersService(managersRepository, null);
            var controller         = new ManagersController(managersService, AutoMapperConfiguration.ConfigureForWeb().CreateMapper())
            {
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext(),
                },
            };
            var parameters = new ManagersPagingParameters()
            {
                PageNumber = 1,
                PageSize   = 1,
                MinId      = 0,
            };
            var response = await controller.GetManagers(parameters);

            var value = response.Value;

            Assert.Single(value);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext(),
            };
            parameters = new ManagersPagingParameters()
            {
                PageNumber = 1,
                PageSize   = 2,
                MinId      = 0,
            };
            response = await controller.GetManagers(parameters);

            value = response.Value;
            Assert.Equal(2, value.Count());
            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext(),
            };
            parameters = new ManagersPagingParameters()
            {
                PageNumber = 1,
                PageSize   = 2,
                MinId      = 2,
            };
            response = await controller.GetManagers(parameters);

            value = response.Value;
            Assert.Single(value);

            dbContext.Dispose();
        }
 public async Task <PagedList <ManagersViewModel> > GetManagers(ManagersPagingParameters managersPagingParameters)
 {
     try
     {
         return(await this.managersRepository.GetManagers(managersPagingParameters));
     }
     catch (Exception ex)
     {
         this.logger.LogError("Error retrieving managers" + ex);
         throw;
     }
 }
        public async Task <ActionResult <IEnumerable <ManagersViewModel> > > GetManagers([FromQuery] ManagersPagingParameters managersPagingParameters)
        {
            var managers = await this.managersService.GetManagers(managersPagingParameters);

            if (managers == null)
            {
                return(this.BadRequest());
            }

            var metadata = new
            {
                managers.TotalCount,
                managers.PageSize,
                managers.CurrentPage,
                managers.TotalPages,
                managers.HasNext,
                managers.HasPrevious,
            };

            this.Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata));
            this.Response.Headers.Add("Access-Control-Expose-Headers", "X-Pagination");
            return(managers);
        }