public async Task <PagedList <T> > GetPaginatedDetails <T>(EmployeesPaginationQuery paginationQuery, bool isAdministrator) { IQueryable <Employee> query; if (!isAdministrator) { query = _dbContext.Employees.Where(e => e.Profession == Profession.DOCTOR || e.Profession == Profession.NURSE); } else { query = _dbContext.Employees; } if (query.Count() < 1) { throw new NotFoundException("Employees not found"); } if (!string.IsNullOrEmpty(paginationQuery.SearchPhrase) && !string.IsNullOrEmpty(paginationQuery.FilterColumn)) { query = query.Where(CreateCompareExpression <Employee>(paginationQuery.FilterColumn, paginationQuery.SearchPhrase)); } if (!string.IsNullOrEmpty(paginationQuery.SortBy)) { var columnSelector = Employee.GetDictionaryOfProperties(); var columnToOrder = columnSelector[paginationQuery.SortBy]; query = query.OrderBy(columnToOrder); } var queryDTO = _mapper.ProjectTo <T>(query); if (queryDTO.Count() < 1) { throw new NotFoundException("Results of pagination query not found"); } var pagedList = await PagedList <T> .CreateAsync(queryDTO, paginationQuery.PageNumber, paginationQuery.PageSize); return(pagedList); }
public async Task <ActionResult <PagedList <EmployeeDetailsDTO> > > GetAllDetails([FromQuery] EmployeesPaginationQuery query) { var pagedList = await _employeeService.GetPaginatedDetails <EmployeeDetailsDTO>(query, true); return(Ok(pagedList)); }