public async Task <IHttpActionResult> UpdateUser(UpdateUserBindingModel model)
        {
            string slog = string.Format("UpdateUser model: {0}", JsonConvert.SerializeObject(model));

            logger.Debug(slog);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            User user = userService.GetUser(model.Id);

            if (user != null)
            {
                try
                {
                    bool   isPhonenumberChanged = false;
                    string phoneCode            = string.Empty;
                    Random rnd = new Random(DateTime.Now.Second);
                    phoneCode = rnd.Next(1000, 9999).ToString();

                    if (user.PhoneNumber != model.phoneNumber)
                    {
                        isPhonenumberChanged = true;
                        user.PhoneNumberCode = phoneCode;
                        user.PhoneNumber     = model.phoneNumber;
                    }

                    user.FirstName     = model.firstName;
                    user.LastName      = model.lastName;
                    user.PostalCode    = model.billingZipCode;
                    user.StreetAddress = model.billingStreetNumber;
                    userService.Update(model.Id, user);

                    if (isPhonenumberChanged)
                    {
                        // Send SMS to phone
                        await this.AppUserManager.SendSmsAsync(user.Id, "Vethentia Phone code is " + phoneCode);
                    }

                    await AppSignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);
                }
                catch (Exception ex)
                {
                    logger.Error("UpdateUser", ex);
                    throw;
                }
            }

            // return Created(locationHeader, TheModelFactory.Create(user));
            RegisterResponseBindingModel resModel = new RegisterResponseBindingModel()
            {
                msgId       = 16,
                phoneNumber = model.phoneNumber,
                status      = 0,
                userId      = user.Id
            };

            return(Ok(resModel));
        }
        public async Task <IHttpActionResult> Register(CreateUserBindingModel model)
        {
            string slog = string.Format("Register model: {0}", JsonConvert.SerializeObject(model));

            logger.Debug(slog);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            string phoneCode = string.Empty;
            Random rnd       = new Random(DateTime.Now.Second);

            phoneCode = rnd.Next(1000, 9999).ToString();

            var user = new User()
            {
                UserName        = model.emailAddress,
                Email           = model.emailAddress,
                FirstName       = model.firstName,
                LastName        = model.lastName,
                PhoneNumber     = model.phoneNumber,
                PostalCode      = model.billingZipCode,
                StreetAddress   = model.billingStreetNumber,
                RegisteredAt    = DateTime.Now,
                PhoneNumberCode = phoneCode
            };

            try
            {
                string userId = string.Empty;

                User userCheck = userService.GetUserByEmail(model.emailAddress);
                if (userCheck == null || (userCheck != null && (!userCheck.EmailConfirmed || !userCheck.PhoneNumberConfirmed)))
                {
                    if (userCheck == null)
                    {
                        bool val = userService.IsPhoneNumberRegistered(model.phoneNumber);
                        if (val)
                        {
                            ModelState.AddModelError("", string.Format("{0} is already registered.", model.phoneNumber));
                            return(BadRequest(ModelState));
                        }

                        IdentityResult addUserResult = await this.AppUserManager.CreateAsync(user, model.password);

                        if (!addUserResult.Succeeded)
                        {
                            return(GetErrorResult(addUserResult));
                        }
                        await AppSignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        userId = user.Id;
                    }
                    else
                    {
                        userCheck.FirstName       = model.firstName;
                        userCheck.LastName        = model.lastName;
                        userCheck.PhoneNumber     = model.phoneNumber;
                        userCheck.StreetAddress   = model.billingStreetNumber;
                        userCheck.PostalCode      = model.billingZipCode;
                        userCheck.PhoneNumberCode = phoneCode;
                        userService.Update(userCheck.Id, userCheck);
                        userId = userCheck.Id;
                    }

                    string name = user.FirstName + " " + user.LastName;
                    string code = await this.AppUserManager.GenerateEmailConfirmationTokenAsync(userId);

                    code = HttpUtility.UrlEncode(code);

                    string uri         = HttpContext.Current.Request.Url.AbsoluteUri;
                    string host        = uri.Substring(0, uri.IndexOf(HttpContext.Current.Request.Url.AbsolutePath));
                    var    callbackUrl = string.Format("{0}/Account/ConfirmEmail?userId={1}&code={2}", host, user.Id, code);

                    //var callbackUrl = Url.Action("ConfirmEmail", "Account",   new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);

                    string body = "Hello " + name + ",";
                    body += "<br /><br />Please click the following link to activate your account";
                    body += "<br /><a href = '" + callbackUrl + "'>Click here to activate your account.</a>";
                    body += "<br /><br />Thanks";

                    // Send Email out
                    await AppUserManager.SendEmailAsync(userId, "Confirm your account", body);

                    // Send SMS to phone
                    await this.AppUserManager.SendSmsAsync(userId, "Vethentia Phone code is " + phoneCode);
                }
                else
                {
                    ModelState.AddModelError("", string.Format("{0} is already registered.", model.phoneNumber));
                    return(BadRequest(ModelState));
                }
            }
            catch (Exception ex)
            {
                logger.Error("Register", ex);
                throw;
            }
            Uri locationHeader = new Uri(Url.Link("GetUserById", new { id = user.Id }));

            // return Created(locationHeader, TheModelFactory.Create(user));
            RegisterResponseBindingModel resModel = new RegisterResponseBindingModel()
            {
                msgId       = 16,
                phoneNumber = model.phoneNumber,
                status      = 0,
                userId      = user.Id
            };

            return(Ok(resModel));
        }