public async Task<IHttpActionResult> SignIn(AccountEmailSignIn model)
        {
            var user = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == model.Email);

            if (user == null)
                return await Create(model);

            if (!user.EmailPassword.Compare(model.Password))
                return BadRequest("Invalid password.");

            //Sign In
            Authorization.UpdateFrom(user);
            Session.UpdateFrom(user);

            return Ok(GetAccountDetails());
        }
        async Task<IHttpActionResult> Create(AccountEmailSignIn model)
        {
            if (string.IsNullOrEmpty(model.UserId))
                model.UserId = Guid.NewGuid().ToString();

            if (await AppDatabase.Users.AnyAsync(o => o.Id == model.UserId))
            {
                return BadRequest("UserId is in use.");
            }
            if (await AppDatabase.Users.AnyAsync(o => o.Email == model.Email))
            {
                return BadRequest("Email is in use.");
            }

            var user = new UserAccount
            {
                Email = model.Email,
                Id = model.UserId,
                CreatedOn = DateTime.UtcNow,
                ModifiedOn = DateTime.UtcNow,
                EmailPassword = UserPassword.Create(model.Password),
                PhonePassword = UserPassword.Create(model.Password),
            };
            AppDatabase.Users.Add(user);

            await AppDatabase.SaveChangesAsync();

            await SendWelcomeMail(new UserEmailViewModel
            {
                UserId = user.Id,
                UserEmail = user.Email
            });


            //Sign In
            Authorization.UpdateFrom(user);
            Session.UpdateFrom(user);

            return Ok(GetAccountDetails());
        }