public async Task <ContactBoolResponse> Handle(CreateContactRequest createContactRequest, CancellationToken cancellationToken) { var response = new ContactBoolResponse(true); var newContact = Mapper.Map <Contact>(createContactRequest); newContact.OrganisationId = null; newContact.Status = ContactStatus.New; newContact.SignInType = "ASLogin"; newContact.Title = ""; newContact.GivenNames = createContactRequest.GivenName; var existingContact = await _contactRepository.GetContact(newContact.Email); if (existingContact == null) { Contact contactResponse; try { contactResponse = await _contactRepository.CreateNewContact(newContact); } catch (Exception e) { _logger.LogInformation($"CreateContactHandler Error: {e.Message} {e.StackTrace} {e.InnerException?.Message}"); throw; } var invitationResult = await _signInService.InviteUser(createContactRequest.Email, createContactRequest.GivenName, createContactRequest.FamilyName, contactResponse.Id); if (!invitationResult.IsSuccess) { if (invitationResult.UserExists) { await _contactRepository.UpdateSignInId(contactResponse.Id, invitationResult.ExistingUserId); response.Result = true; return(response); } response.Result = false; return(response); } } else { var invitationResult = await _signInService.InviteUser(createContactRequest.Email, createContactRequest.GivenName, createContactRequest.FamilyName, existingContact.Id); if (!invitationResult.IsSuccess) { if (invitationResult.UserExists) { await _contactRepository.UpdateSignInId(existingContact.Id, invitationResult.ExistingUserId); response.Result = true; return(response); } response.Result = false; return(response); } } return(response); }