Exemplo n.º 1
0
        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());
        }
Exemplo n.º 3
0
        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));
        }