public async Task <IActionResult> Completed(string key, [FromBody] PersonSearchCompleted personCompletedEvent) { try { Guard.NotNull(personCompletedEvent, nameof(personCompletedEvent)); using (LogContext.PushProperty("SearchRequestKey", personCompletedEvent?.SearchRequestKey)) using (LogContext.PushProperty("DataPartner", personCompletedEvent?.ProviderProfile.Name)) { _logger.LogInformation("Received Person search completed event"); var cts = new CancellationTokenSource(); SSG_SearchApiRequest request = await _register.GetSearchApiRequest(key); //update completed event var searchApiEvent = _mapper.Map <SSG_SearchApiEvent>(personCompletedEvent); _logger.LogDebug($"Attempting to create a new event for SearchApiRequest"); await _searchApiRequestService.AddEventAsync(request.SearchApiRequestId, searchApiEvent, cts.Token); _logger.LogInformation($"Successfully created completed event for SearchApiRequest"); //upload search result to dynamic search api var searchRequestId = await _searchApiRequestService.GetLinkedSearchRequestIdAsync(request.SearchApiRequestId, cts.Token); SSG_SearchRequest searchRequest = new SSG_SearchRequest() { SearchRequestId = searchRequestId }; if (personCompletedEvent?.MatchedPersons != null) { //try following code, but automapper throws exception.Cannot access a disposed object.Object name: 'IServiceProvider'. //Parallel.ForEach<Person>(personCompletedEvent.MatchedPersons, async p => //{ // await _searchResultService.ProcessPersonFound(p, personCompletedEvent.ProviderProfile, searchRequest, cts.Token); //}); foreach (PersonFound p in personCompletedEvent.MatchedPersons) { SSG_Identifier sourceIdentifer = await _register.GetMatchedSourceIdentifier(p.SourcePersonalIdentifier, key); await _searchResultService.ProcessPersonFound(p, personCompletedEvent.ProviderProfile, searchRequest, request.SearchApiRequestId, cts.Token, sourceIdentifer); } } await UpdateRetries(personCompletedEvent?.ProviderProfile.Name, 0, cts, request); return(Ok()); } } catch (Exception ex) { _logger.LogError(ex.Message); return(BadRequest()); } }
public async Task <IActionResult> Completed(Guid id, [FromBody] PersonSearchCompleted personCompletedEvent) { using (LogContext.PushProperty("FileId", " - FileId: " + personCompletedEvent?.FileId)) { _logger.LogInformation("Received Person search completed event with SearchRequestId is " + id); var cts = new CancellationTokenSource(); try { //update completed event var searchApiEvent = _mapper.Map <SSG_SearchApiEvent>(personCompletedEvent); _logger.LogDebug($"Attempting to create a new event for SearchApiRequest [{id}]"); var result = await _searchApiRequestService.AddEventAsync(id, searchApiEvent, cts.Token); _logger.LogInformation($"Successfully created completed event for SearchApiRequest [{id}]"); //upload search result to dynamic search api var searchRequestId = await _searchApiRequestService.GetLinkedSearchRequestIdAsync(id, cts.Token); SSG_SearchRequest searchRequest = new SSG_SearchRequest() { SearchRequestId = searchRequestId }; if (personCompletedEvent.MatchedPersons != null) { //try following code, but automapper throws exception.Cannot access a disposed object.Object name: 'IServiceProvider'. //Parallel.ForEach<Person>(personCompletedEvent.MatchedPersons, async p => //{ // await _searchResultService.ProcessPersonFound(p, personCompletedEvent.ProviderProfile, searchRequest, cts.Token); //}); foreach (Person p in personCompletedEvent.MatchedPersons) { await _searchResultService.ProcessPersonFound(p, personCompletedEvent.ProviderProfile, searchRequest, cts.Token); } } } catch (Exception ex) { _logger.LogError(ex.Message); return(BadRequest()); } return(Ok()); } }