public async Task <IActionResult> SetEmailAddress(ChangeEmailAddressRequest request)
        {
            var userProfileId = Convert.ToInt32(User.FindFirst(ClaimTypes.Name)?.Value);
            var userProfile   = await _userProfileReader.GetByUserProfileId(userProfileId);

            if (userProfile == null)
            {
                return(NotFound());
            }

            var existingUserProfile = await _userProfileReader.GetByEmailAddress(request.EmailAddress);

            if (existingUserProfile != null && existingUserProfile.Id != userProfile.Id)
            {
                return(BadRequest("Email address already in use"));
            }

            // VALIDATE: Email Address Format
            // CONSIDER: Token Acceptance
            // VALIDATE: Not the current email address

            await _userProfileWriter.SetEmailAddress(userProfile.Id, request.EmailAddress);

            return(Ok());
        }
        public async Task <IActionResult> ChangeEmailAddressConfirmToken(ChangeEmailAddressRequest newEmail)
        {
            var accessToken = HttpContext.Request.Headers["Authorization"].ToString();

            if (accessToken == null)
            {
                return(NotFound("Something is wrong with your authorization token"));
            }

            if (newEmail.Email == null)
            {
                return(NotFound("Enter valid email"));
            }

            ChangeEmailResult changeEmailResult = await _identityService.ChangeEmail(newEmail.Email, accessToken);

            if (changeEmailResult.Success)
            {
                string callback = changeEmailResult.Token;
                Email  email    = new Email(newEmail.Email, "Change email address confirmation", callback);

                await _emailEmmiter.SendChangeEmailEmail(email);

                return(Ok(new SimpleSuccessResponse
                {
                    Success = true,
                    Message = "Email change token was send to Your email"
                }));
            }
            else
            {
                if (changeEmailResult.Errors.Count() > 1)
                {
                    return(BadRequest(new AuthenticationFailedResponse
                    {
                        Errors = changeEmailResult.Errors
                    }));
                }
                else
                {
                    return(BadRequest(changeEmailResult.Errors.ToList()[0]));
                }
            }
        }