private SearchResponseDTO <Company> SearchCompaniesWithQuery(SearchCompanyParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            if (parameters.Page.HasValue && parameters.Page.Value < 0 ||
                parameters.PerPage.HasValue && parameters.PerPage.Value < 0)
            {
                throw new InvalidPaginationParametersException();
            }

            IQueryable <Company> query = GetCompaniesSearchQuery(parameters);

            int totalCount = query.Count();

            if (parameters.Page.HasValue && parameters.Page != 0 && parameters.PerPage.HasValue)
            {
                query = query.Skip((parameters.Page.Value - 1) * parameters.PerPage.Value);
            }

            if (parameters.PerPage.HasValue)
            {
                query = query.Take(parameters.PerPage.Value);
            }

            List <Company> companies = query.ToList();

            return(new SearchResponseDTO <Company>
            {
                Items = companies,
                TotalCount = totalCount
            });
        }
        private IQueryable <Company> GetCompaniesSearchQuery(SearchCompanyParameterDTO parameters)
        {
            IQueryable <Company> query = _queryBuilder.SetBaseCompaniesInfo()
                                         .SetType(_mapper.Map <CompanyType?>(parameters.Type))
                                         .SetSize(_mapper.Map <CompanySize?>(parameters.Size))
                                         .SetSearchTerm(parameters.SearchTerm)
                                         .SetMyCompanies(parameters.MyCompanies, parameters.CurrentUserCompanyId)
                                         .Build();

            return(query);
        }
        public async Task <IActionResult> Filter([FromQuery] SearchCompanyParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            parameters.CurrentUserCompanyId = (await GetCurrentUser()).CompanyId;
            SearchResponseDTO <CompanyDTO> result = _service.SearchCompanies(parameters);

            return(Ok(result));
        }
        public SearchResponseDTO <CompanyDTO> SearchCompanies(SearchCompanyParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            SearchResponseDTO <Company> result = SearchCompaniesWithQuery(parameters);

            return(new SearchResponseDTO <CompanyDTO>
            {
                Items = _mapper.Map <IEnumerable <CompanyDTO> >(result.Items),
                TotalCount = result.TotalCount
            });
        }