public async Task ConfirmEmailAddressUpdate(Guid memberId, string confirmationToken) { Member member = await GetMember(memberId, memberId); MemberEmailAddressUpdateToken token = await _memberRepository.GetMemberEmailAddressUpdateToken(member.Id); if (token == null) { return; } if (token.ConfirmationToken != confirmationToken) { throw new OdkServiceException("Token mismatch"); } Member existing = await _memberRepository.FindMemberByEmailAddress(token.NewEmailAddress); if (existing != null) { await _memberRepository.DeleteEmailAddressUpdateToken(member.Id); throw new OdkServiceException("Error updating email address: email address is already registered to an account"); } await _memberRepository.UpdateMemberEmailAddress(member.Id, token.NewEmailAddress); _cacheService.RemoveVersionedItem <Member>(member.Id); await _memberRepository.DeleteEmailAddressUpdateToken(member.Id); }