public async Task <CompanySearchDTO> SearchCompany(SearchCompanyQuery query) { var result = await _companiesRepository.Search(query); var companies = new CompanySearchDTO() { Results = result.Select(c => { var company = new CompanyDTO() { EstablishmentYear = c.EstablishmentYear, Name = c.Name, Employees = c.Employees.Select(e => { var employee = new EmployeeDTO() { DateOfBirth = e.DateOfBirth, FirstName = e.FirstName, LastName = e.LastName, JobTitle = e.JobTitle.ToString("g") }; return(employee); }).ToList() }; return(company); }) }; return(companies); }
/// <summary> /// Method that gets async matching companies from db /// </summary> public async Task <List <Company> > Get(CompanySearchDTO searchDTO) { // get all companies query with employees attached var companies = _dbContext.Companies .Include(e => e.Employees) .AsQueryable(); // apply keyword filter(for company name or employee first/last name contains) if (searchDTO.Keyword is not null) { companies = companies.Where(c => c.Name.Contains(searchDTO.Keyword) || c.Employees.Any(e => e.FirstName.Contains(searchDTO.Keyword) || e.LastName.Contains(searchDTO.Keyword))); } // apply employy birth date filter if (searchDTO.EmployeeDateOfBirthFrom is not null || searchDTO.EmployeeDateOfBirthTo is not null) { companies = companies.Where(e => e.Employees.Any(e => (searchDTO.EmployeeDateOfBirthFrom != null ? e.DateOfBirth >= searchDTO.EmployeeDateOfBirthFrom : true) && (searchDTO.EmployeeDateOfBirthTo != null ? e.DateOfBirth <= searchDTO.EmployeeDateOfBirthTo : true))); } // apply job titles filter if (searchDTO.EmployeeJobTitles?.Count > 0) { companies = companies.Where(e => e.Employees.Any(e => searchDTO.EmployeeJobTitles.Contains(e.JobTitle.ToString()))); } return(await companies.ToListAsync()); }
public async Task <IActionResult> Search(CompanySearchDTO searchDTO) { // get companies var companies = await _companiesRepository.Get(searchDTO); // prepare response with result companies var companiesDTOs = companies.Select(e => CompanyDTO.GetFromCompany(e)); var response = new { Results = companiesDTOs }; return(Ok(response)); }