using Application.Services.Database.PostgreSQL; using FluentValidation; namespace Application.Endpoints.Chats.SendMessage; public class SendMessageValidator : AbstractValidator { private readonly IDoctorRepository _doctorRepository; private readonly IPatientRepository _patientRepository; public SendMessageValidator(IDoctorRepository doctorRepository, IPatientRepository patientRepository) { RuleFor(x => x.Sender) .NotEmpty().WithMessage("Sender Id is required.").WithErrorCode(HttpStatusCodes.BadRequest.ToString()); RuleFor(x => x.Receiver) .NotEmpty().WithMessage("Receiver Id is required.").WithErrorCode(HttpStatusCodes.BadRequest.ToString()); RuleFor(x => x.Message) .NotEmpty().WithMessage("Message is required.").WithErrorCode(HttpStatusCodes.BadRequest.ToString()); RuleFor(x => x) .MustAsync(CheckForUsersExistence).WithMessage("One of the users is not existing.") .WithErrorCode(HttpStatusCodes.BadRequest.ToString()); _patientRepository = patientRepository; _doctorRepository = doctorRepository; } private async Task CheckForUsersExistence(SendMessageCommand request, CancellationToken token) { var firstCheck = await _patientRepository.GetByIdAsync(request.Sender, token) != null && await _doctorRepository.GetByIdAsync(request.Receiver, token) != null; var secondCheck = await _patientRepository.GetByIdAsync(request.Receiver, token) != null && await _doctorRepository.GetByIdAsync(request.Sender, token) != null; return firstCheck || secondCheck; } }