Exemplo n.º 1
0
        public async Task <IActionResult> GetEmployees([FromQuery] EmployeeParametersDto employeeParameterDto)
        {
            var employeesFromRepo = await _employeeRepo.GetEmployeesAsync(employeeParameterDto);

            var paginationMetadata = new
            {
                totalCount        = employeesFromRepo.MetaData.TotalCount,
                pageSize          = employeesFromRepo.MetaData.PageSize,
                currentPageSize   = employeesFromRepo.MetaData.CurrentPageSize,
                currentStartIndex = employeesFromRepo.MetaData.CurrentStartIndex,
                currentEndIndex   = employeesFromRepo.MetaData.CurrentEndIndex,
                pageNumber        = employeesFromRepo.MetaData.PageNumber,
                totalPages        = employeesFromRepo.MetaData.TotalPages,
                hasPrevious       = employeesFromRepo.MetaData.HasPrevious,
                hasNext           = employeesFromRepo.MetaData.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var employeesDto = _mapper.Map <IEnumerable <EmployeeDto> >(employeesFromRepo);
            var response     = new Response <IEnumerable <EmployeeDto> >(employeesDto);

            return(Ok(response));
        }
Exemplo n.º 2
0
        public async Task <PagingResponse <EmployeeDto> > GetEmployeesAsync(EmployeeParametersDto employeeParameters)
        {
            var queryStringParam = new Dictionary <string, string>
            {
                ["pageNumber"] = employeeParameters.PageNumber.ToString(),
                ["pageSize"]   = employeeParameters.PageSize.ToString(),
                ["sortOrder"]  = employeeParameters.SortOrder.ToString(),
                ["filters"]    = employeeParameters.Filters.ToString()
            };

            using (var httpClient = new HttpClient())
            {
                using (var response = await httpClient.GetAsync(QueryHelpers.AddQueryString(uriEmployee.ToString(), queryStringParam)))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        var pagingResponse = new PagingResponse <EmployeeDto>
                        {
                            Items    = JsonConvert.DeserializeObject <PageListEmployee>(content).Employees,
                            Metadata = JsonConvert.DeserializeObject <MetaData>(response.Headers.GetValues("x-pagination").First())
                        };

                        pagingResponse.Filters   = employeeParameters.Filters;
                        pagingResponse.SortOrder = employeeParameters.SortOrder;
                        return(pagingResponse);
                    }
                    return(null);
                }
            }
        }
        GetEmployeesForCompany(Guid companyId, [FromQuery] EmployeeParametersDto parameters)
        {
            if (!await _service.CompanyExistsAsync(companyId))
            {
                return(NotFound(new{ title = "2" }));
            }

            var data = await _service.GetEmployeesAsync(companyId, parameters);

            var employees = EmployeeProfile.InitializeAutoMapper().Map <IEnumerable <EmployeeDto> >(data);

            return(Ok(employees));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Index(int page = 1, int pageSize = 10, string filters = "", string sortOrder = "")
        {
            ViewBag.pageSize = pageSize;
            ViewBag.filter   = filters;

            ViewData["IdSortParm"]           = sortOrder == "Id" ? "-Id" : "Id";
            ViewData["FirstNameSortParm"]    = sortOrder == "FirstName" ? "-FirstName" : "FirstName";
            ViewData["LastNameSortParm"]     = sortOrder == "LastName" ? "-LastName" : "LastName";
            ViewData["EmailAddressSortParm"] = sortOrder == "EmailAddress" ? "-EmailAddress" : "EmailAddress";

            EmployeeParametersDto employeeParameters = new EmployeeParametersDto()
            {
                PageNumber = page,
                PageSize   = pageSize,
                SortOrder  = sortOrder,
                Filters    = filters
            };

            var pagingResponse = await _employeeRepo.GetEmployeesAsync(employeeParameters);

            return(View(pagingResponse));
        }
Exemplo n.º 5
0
        public async Task <PagedList <Employee> > GetEmployeesAsync(EmployeeParametersDto employeeParameters)
        {
            if (employeeParameters == null)
            {
                throw new ArgumentNullException(nameof(employeeParameters));
            }

            // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate
            var collection = _context.Employees
                             .Include(e => e.EmployeeDepartments)
                             as IQueryable <Employee>;

            var sieveModel = new SieveModel
            {
                Sorts   = employeeParameters.SortOrder ?? "Id",
                Filters = employeeParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(await PagedList <Employee> .CreateAsync(collection,
                                                           employeeParameters.PageNumber,
                                                           employeeParameters.PageSize));
        }
Exemplo n.º 6
0
        public async Task <IEnumerable <Employee> > GetEmployeesAsync(Guid companyId, EmployeeParametersDto parameters)
        {
            if (companyId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(companyId));
            }

            var data = _db.Employee.Where(m => m.CompanyId.Equals(companyId));

            if (!string.IsNullOrWhiteSpace(parameters.Gender))
            {
                var sex           = parameters.Gender.Trim();
                var displayGender = Enum.Parse <Gender>(sex);
                data = data.Where(m => m.Gender == displayGender);
            }

            if (!string.IsNullOrWhiteSpace(parameters.Q))
            {
                data = data.Where(m => m.EmployeeNo.Contains(parameters.Q) || m.FirstName.Contains(parameters.Q));
            }

            var mapping = _service.GetPropertyMapping <EmployeeDto, Employee>();

            data = data.ApplySort(parameters.OrderBy, mapping);

            return(await data.ToListAsync());
        }