public async override Task <CustomerViewModel> ExecuteQuery(AuthenticateCustomerQuery request,
                                                                CancellationToken cancellationToken)
    {
        CustomerViewModel customerViewModel = new CustomerViewModel();

        var signIn = await _signInManager
                     .PasswordSignInAsync(request.Email, request.Password, false, true);

        if (signIn.Succeeded)
        {
            var user = await _userManager
                       .FindByEmailAsync(request.Email);

            if (user == null)
            {
                throw new ApplicationDataException("User not found.");
            }

            var token = await _jwtService
                        .GenerateJwt(user.Email);

            //Customer data
            var customer = await _customers
                           .GetByEmail(user.Email, cancellationToken);

            customerViewModel.Id             = customer.Id.Value;
            customerViewModel.Name           = customer.Name;
            customerViewModel.Email          = user.Email;
            customerViewModel.Token          = token;
            customerViewModel.LoginSucceeded = signIn.Succeeded;
        }
        else
        {
            customerViewModel.ValidationResult.Errors.Add(new ValidationFailure(string.Empty,
                                                                                "Usename or password invalid"));
        }

        return(customerViewModel);
    }