public async Task <LoginCustomerResultModel> LoginAsync(LoginCustomerInputModel loginCustomerInputModel)
        {
            var loginCustomerResultModel = new LoginCustomerResultModel();

            var user = await this.userManager.FindByEmailAsync(loginCustomerInputModel.Email);

            if (user == null)
            {
                loginCustomerResultModel.Succeeded = false;
                loginCustomerResultModel.Errors.Add(InvalidCredentialsErrorMessage);

                return(loginCustomerResultModel);
            }

            var passwordValid = await this.userManager.CheckPasswordAsync(user, loginCustomerInputModel.Password);

            if (!passwordValid)
            {
                loginCustomerResultModel.Succeeded = false;
                loginCustomerResultModel.Errors.Add(InvalidCredentialsErrorMessage);

                return(loginCustomerResultModel);
            }

            var roles = await this.userManager.GetRolesAsync(user);

            var token = this.jwtTokenGenerator.GenerateToken(user, roles);

            loginCustomerResultModel.Succeeded = true;
            loginCustomerResultModel.Token     = token;

            return(loginCustomerResultModel);
        }
        public async Task <ActionResult <string> > Login(LoginCustomerInputModel loginCustomerInputModel)
        {
            var result = await this.identityService.LoginAsync(loginCustomerInputModel);

            if (!result.Succeeded)
            {
                return(this.BadRequest(result.Errors));
            }

            return(result.Token);
        }
        public async Task <ActionResult <string> > Register(RegisterCustomerInputModel registerCustomerInputModel)
        {
            var result = await this.identityService.RegisterAsync(registerCustomerInputModel);

            if (!result.Succeeded)
            {
                return(this.BadRequest(result.Errors));
            }

            var loginCustomerInputModel = new LoginCustomerInputModel
            {
                Email    = result.Email,
                Password = result.Password
            };

            return(await this.Login(loginCustomerInputModel));
        }