public async Task <ActionResult <List <GetEmployeeResponse> > > GetEmployees([FromQuery] GetEmployeesFilter filter) { return(Ok(await _employeeService.GetAllEmployees(filter))); }
public async Task <List <GetEmployeeWithAccountImageResponse> > GetAllEmployees(GetEmployeesFilter filter) { // prepare filter predicate var predicate = PredicateBuilder.New <Employee>(true); if (!string.IsNullOrEmpty(filter?.SearchString)) { predicate = predicate.Or(p => p.FirstName.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.LastName.ToLower().Contains(filter.SearchString.ToLower())); } var specializationId = new Guid(); if (!string.IsNullOrEmpty(filter?.SpecializationId) && Guid.TryParse(filter?.SpecializationId, out specializationId)) { predicate = predicate.And(p => p.EmployeeSpecializations.Any(x => x.SpecializationId == specializationId)); } if (filter?.Role is not null) { predicate = predicate.And(p => p.Account.Role == filter.Role); } var employees = await _unitOfWork.Employees.FindWithSpecializations(predicate); return(employees.Select(employee => new GetEmployeeWithAccountImageResponse() { Id = employee.Id, AccountId = employee.AccountId, FirstName = employee.FirstName, LastName = employee.LastName, Image = employee.Account.Image, Specializations = employee.EmployeeSpecializations .Select(es => new GetSpecializationResponse() { Id = es.Specialization.Id, Name = es.Specialization.Name }) .ToList() }) .ToList()); }