示例#1
0
        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());
            }
        }
示例#2
0
        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());
            }
        }