public IHttpActionResult UpdateProfile(ProfileUpdateRequest request)
        {
            var response = new ProfileUpdateResponse();

            try
            {
                var isValidRequest = false;
                var emailChanged = false;

                var memberId = request.GetMemberId();

                var member = MembershipAdapter.GetMember(memberId);

                if (request.IsValidModel())
                {
                    if (member.Exists())
                    {
                        if (member.ConfirmedRegistration())
                        {
                            if (memberId == member.Id)
                            {
                                isValidRequest = true;
                                emailChanged = !string.Equals(request.Email, member.Email, StringComparison.InvariantCultureIgnoreCase);
                            }
                        }
                    }
                }

                if (isValidRequest)
                {
                    var memberProfile = new MemberProfile
                    {
                        MemberId = member.Id,
                        TimeZoneId = request.TimeZoneId,
                        Alias = request.Alias,
                        Gender = request.Gender,
                        BirthDate = request.BirthDate
                    };

                    memberProfile = MembershipAdapter.UpdateProfile(memberProfile);

                    if (emailChanged)
                    {
                        var memberEmailChange = MembershipAdapter.GetMemberEmailChange(member.Id);

                        if (memberEmailChange.Exists())
                        {
                            if (!string.Equals(memberEmailChange.Email, request.Email, StringComparison.InvariantCultureIgnoreCase))
                            {
                                memberEmailChange.Email = request.Email;

                                MembershipAdapter.UpdateEmailChange(memberEmailChange);
                            }
                        }
                        else
                        {
                            memberEmailChange.MemberId = member.Id;
                            memberEmailChange.Email = request.Email;

                            MembershipAdapter.CreateEmailChange(memberEmailChange);
                        }

                        var memberTokens = MembershipAdapter.GetMemberTokens(member.Id, TokenTypes.EmailChange, true);

                        var memberToken = new MemberToken();

                        memberToken.MemberId = member.Id;
                        memberToken.TokenType = TokenTypes.EmailChange;
                        memberToken.RequestDate = DateTime.Now.ToUniversalTime();

                        if (memberTokens.Any())
                        {
                            memberToken.Token = memberTokens.ElementAt(0).Token;
                            memberToken = MembershipAdapter.UpdateToken(memberToken);
                        }
                        else
                        {
                            memberToken.Token = Guid.NewGuid();
                            memberToken = MembershipAdapter.CreateToken(memberToken);
                        }

                        var email = new EmailChangeEmail
                        {
                            DomainName = ConfigHelper.DomainName,
                            DomainBaseUrl = ConfigHelper.DomainBaseUrl,
                            Alias = request.Alias,
                            ConfirmationToken = memberToken.Token
                        };

                        var emailBuilder = new EmailBuilder(EmailReference.HTML.Templates.Main, EmailReference.HTML.Contents.EmailChange);
                        var emailBody = emailBuilder.BuildBody<EmailChangeEmail>(email);
                        var emailResult = EmailHelper.SendEmail(ConfigHelper.NoReplayEmailAddress,
                                                                ConfigHelper.DomainName,
                                                                request.Email,
                                                                member.Profile.Alias,
                                                                email.Subject,
                                                                emailBody,
                                                                true);
                    }

                    response.IsSuccessful = true;
                    response.StatusMessage = "Update profile succeeded";
                }
                else
                {
                    response.IsSuccessful = false;
                    response.StatusMessage = "Update profile was unsuccessful";
                    response.Errors.AddRange(request.GetErrors());
                }
            }
            catch (Exception ex)
            {
                this.Log<ProfileUpdateRequest>(LogCategories.Error, request, ex.Message);

                response.IsSuccessful = false;
                response.StatusMessage = this.StatusMessageForExpection;
                response.Errors.Add(ex.Message);
            }

            return Ok(response);
        }
        public void UpdateProfile()
        {
            var memberId = this.RequestUserInput<string>("Enter member ID: ", string.Empty);
            var email = this.RequestUserInput<string>("Enter email: ", string.Empty);
            var alias = this.RequestUserInput<string>("Enter alias: ", string.Empty);
            var timeZoneId = this.RequestTimeZone("Enter time zone ID: ", TimeZones.CentralStandardTime);
            var genderId = this.RequestGender("Enter gender type: ", null);
            var birthDate = this.RequestDate("Enter birth date: ", null);

            var request = new ProfileUpdateRequest
            {
                MemberId = memberId,
                Email = email,
                Alias = alias,
                TimeZoneId = timeZoneId.Value,
                Gender = genderId,
                BirthDate = birthDate
            };

            var response = proxy.UpdateProfile(request);

            this.OutputResponse(response);
        }