public async Task <IActionResult> Register(UserRegisterBingingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(model));
            }

            var user = await this.accountsServices.RegisterUserAsync(model);

            if (user == null)
            {
                this.ViewData["Errors"] = GlobalConstants.InvalidRegisterMessage;
                return(this.View(model));
            }

            await this.signInManager.SignInAsync(user, isPersistent : true);

            return(this.Redirect(GlobalConstants.Index));
        }
        public async Task <OlympiaUser> RegisterUserAsync(UserRegisterBingingModel model)
        {
            await this.AddRootAdminIfDoesNotExistAsync();

            if (model.Age < 12 || model.Age > 65 ||
                string.IsNullOrEmpty(model.Username) ||
                string.IsNullOrEmpty(model.FullName) ||
                this.CheckForExistingUser(model) ||
                !this.CheckUsername(model.Username) ||
                !this.CheckFullName(model.FullName))
            {
                return(null);
            }

            var user = this.mapper.Map <OlympiaUser>(model);

            user.Address.Location    = model.Address;
            user.ShoppingCart.UserId = user.Id;

            var result = await this.userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                await this.userManager.AddToRoleAsync(user, GlobalConstants.ClientRoleName);
            }

            if (model.ProfilePicturImgUrl != null)
            {
                var url = MyCloudinary.UploadImage(model.ProfilePicturImgUrl, model.Username);
                user.ProfilePicturImgUrl = url ?? Constants.CloudinaryInvalidUrl;
            }

            this.context.Update(user);
            await this.context.SaveChangesAsync();

            return(user);
        }
 private bool CheckForExistingUser(UserRegisterBingingModel model)
 {
     return(this.userManager.Users
            .Select(users => users.UserName)
            .Any(name => name == model.Username));
 }