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());
        }