using Application.Services.Database; using FluentValidation; namespace Application.Endpoints.Doctors.Login { public class DoctorLoginValidation : AbstractValidator { private readonly IDoctorRepository _doctorRepository; public DoctorLoginValidation(IDoctorRepository doctorRepository) { _doctorRepository = doctorRepository; RuleFor(x => x.Email) .NotEmpty().WithMessage("Email is required.") .EmailAddress().WithMessage("Invalid email format.") .MustAsync(BeExistingDoctor).WithMessage("Doctor with this email does not exist."); RuleFor(x => x.Password) .NotEmpty().WithMessage("Password is required.") .MinimumLength(8).WithMessage("Password must be at least 8 characters long."); } private async Task BeExistingDoctor(string email, CancellationToken cancellationToken) { return await _doctorRepository.IsDoctorExisting(email); } } }