public async Task <AuthenticatedUserDto> Handle(AuthenticateUser request,
                                                            CancellationToken cancellationToken)
            {
                AuthenticateUserValidator validator        = new AuthenticateUserValidator();
                ValidationResult          validationResult = await validator.ValidateAsync(request, cancellationToken);

                if (!validationResult.IsValid)
                {
                    throw new EntityValidationException(nameof(AuthenticateUser), request, validationResult.Errors);
                }

                User user = await _mainDbContext.Users
                            .AsNoTracking()
                            .Where(u => u.Email == request.Email && !u.IsDeleted)
                            .FirstOrDefaultAsync(cancellationToken);

                if (user.Equals(null))
                {
                    throw new InvalidCredentialException();
                }

                string passwordHash    = user.Password;
                bool   isPasswordValid = BCrypt.Net.BCrypt.Verify(request.Password, passwordHash);

                if (!isPasswordValid)
                {
                    throw new InvalidCredentialException();
                }

                WebToken webToken = await _mediator.Send(new GenerateToken(), cancellationToken);

                return(new AuthenticatedUserDto
                {
                    User = _mapper.Map <UserDto>(user),
                    WebToken = webToken,
                });
            }
 public override bool IsValid()
 {
     ValidationResult = new AuthenticateUserValidator().Validate(this);
     return(ValidationResult.IsValid);
 }