public async Task <SSG_SearchRequest> ProcessUpdateSearchRequest(SearchRequestOrdered searchRequestOrdered) { var cts = new CancellationTokenSource(); _cancellationToken = cts.Token; SSG_SearchRequest existedSearchRequest = await VerifySearchRequest(searchRequestOrdered); if (existedSearchRequest == null) { return(null); } existedSearchRequest.IsDuplicated = true; _uploadedSearchRequest = existedSearchRequest; //get existedPersonSought SSG_Person existedSoughtPerson = existedSearchRequest?.SSG_Persons?.FirstOrDefault( m => m.IsPrimary == true); if (existedSoughtPerson == null) { string error = "the updating personSought does not exist. something is wrong."; _logger.LogError(error); throw new Exception(error); } existedSoughtPerson = await _searchRequestService.GetPerson(existedSoughtPerson.PersonId, _cancellationToken); existedSoughtPerson.IsDuplicated = true; _uploadedPerson = existedSoughtPerson; SearchRequestEntity newSearchRequest = _mapper.Map <SearchRequestEntity>(searchRequestOrdered); if (newSearchRequest == null) { string error = "cannot do updating as newSearchRequest is null"; _logger.LogError(error); throw new Exception(error); } //update searchRequestEntity await UpdateSearchRequest(newSearchRequest); //update notesEntity if (!String.IsNullOrEmpty(newSearchRequest.Notes) && !String.Equals(existedSearchRequest.Notes, newSearchRequest.Notes, StringComparison.InvariantCultureIgnoreCase)) { await UploadNotes(newSearchRequest, existedSearchRequest); } //update PersonEntity if (searchRequestOrdered.Person == null) { string error = "the searchRequestOrdered does not contain Person. The request is wrong."; _logger.LogError(error); throw new Exception(error); } _personSought = searchRequestOrdered.Person; await UpdatePersonSought(); await UpdateSafetyConcern(); //update RelatedPerson applicant await UpdateRelatedApplicant((string.IsNullOrEmpty(newSearchRequest.ApplicantFirstName) && string.IsNullOrEmpty(newSearchRequest.ApplicantLastName))?null : new RelatedPersonEntity() { FirstName = newSearchRequest.ApplicantFirstName, LastName = newSearchRequest.ApplicantLastName, StatusCode = 1 }); //update identifiers //await UpdateIdentifiers(); await UploadIdentifiers(true); //update employment await UploadEmployment(true); //for phones, addresses, relatedPersons, names are same as creation, as if different, add new one, if same, ignore await UploadAddresses(true); await UploadPhones(true); await UploadRelatedPersons(true); await UploadAliases(true); return(_uploadedSearchRequest); }