using Application.Endpoints.Pacients.Login; using Application.Services.Database; using FluentValidation; namespace Application.Endpoints.Pacients.Registration; public class PacientRegistrationValidation : AbstractValidator { private readonly IPacientRepository _pacientRepository; public PacientRegistrationValidation(IPacientRepository pacientRepository) { _pacientRepository = pacientRepository; RuleFor(x => x.Email) .NotEmpty().WithMessage("Email is required.") .EmailAddress().WithMessage("Invalid email format.") .MustAsync(BeUniqueEmail).WithMessage("Email already exists."); RuleFor(x => x.Password) .NotEmpty().WithMessage("Password is required.") .MinimumLength(8).WithMessage("Password must be at least 8 characters long."); RuleFor(x => x.Name) .NotEmpty().WithMessage("Name is required.") .MinimumLength(3).WithMessage("Name must be at least 3 characters long."); } private async Task BeUniqueEmail(string email, CancellationToken cancellationToken) { var pacient = await _pacientRepository.FindByEmailAsync(email); return pacient == null; } }