public async Task <RegistrantsSearchQueryResult> Handle(RegistrantsSearchQuery query) { var contacts = (await contactRepository.QueryContact(new SearchContactQuery { ContactId = query.Id, UserId = query.UserId, FirstName = query.FirstName, LastName = query.LastName, DateOfBirth = query.DateOfBirth })).Items; var registrants = mapper.Map <IEnumerable <RegistrantProfile> >(contacts); var results = new List <RegistrantWithFiles>(); var resultTasks = registrants.Select(async r => { var result = new RegistrantWithFiles { RegistrantProfile = r, Files = Array.Empty <Shared.Contracts.Submissions.EvacuationFile>() }; if (query.IncludeCases) { var files = (await caseRepository.QueryCase(new EvacuationFilesQuery { PrimaryRegistrantId = r.Id })).Items.Cast <Resources.Cases.EvacuationFile>(); result.Files = mapper.Map <IEnumerable <Shared.Contracts.Submissions.EvacuationFile> >(files); } results.Add(result); }); Task.WaitAll(resultTasks.ToArray()); return(new RegistrantsSearchQueryResult { Items = results }); }
public async Task <RegistrantsSearchQueryResult> Handle(RegistrantsSearchQuery query) { var contacts = (await contactRepository.QueryContact(new SearchContactQuery { UserId = query.UserId, FirstName = query.FirstName, LastName = query.LastName, DateOfBirth = query.DateOfBirth })).Items; var registrants = mapper.Map <IEnumerable <RegistrantProfile> >(contacts); var results = new List <RegistrantWithFiles>(); foreach (var registrant in registrants) { var files = (await caseRepository.QueryCase(new EvacuationFilesQuery { PrimaryRegistrantId = registrant.Id })) .Items.Cast <Resources.Cases.EvacuationFile>(); results.Add(new RegistrantWithFiles { RegistrantProfile = registrant, Files = mapper.Map <IEnumerable <Shared.Contracts.Submissions.EvacuationFile> >(files) }); } return(new RegistrantsSearchQueryResult { Items = results }); }