SendAppointmentReminderUseCase.java
package com.chronus.application.usecase;
import com.chronus.application.service.EmailNotifier;
import com.chronus.application.service.WhatsAppNotifier;
import com.chronus.domain.entity.Appointment;
import com.chronus.domain.entity.Patient;
import com.chronus.domain.exception.InvalidPatientDataException;
import com.chronus.domain.repository.PatientRepository;
/**
* Input port for sending an appointment reminder.
*/
public class SendAppointmentReminderUseCase {
private final PatientRepository patientRepository;
private final EmailNotifier emailNotifier;
private final WhatsAppNotifier whatsAppNotifier;
// inyeccion de dependencias por constructor
public SendAppointmentReminderUseCase(
PatientRepository patientRepository,
EmailNotifier emailNotifier,
WhatsAppNotifier whatsAppNotifier) {
this.patientRepository = patientRepository;
this.emailNotifier = emailNotifier;
this.whatsAppNotifier = whatsAppNotifier;
}
public void execute(String patientId, Appointment appointment) {
Patient patient = patientRepository.findById(patientId)
.orElseThrow(() -> new InvalidPatientDataException("The patient was not found."));
String message = "Recordatorio: su cita está programada para "
+ appointment.getDateTime().value() + ".";
emailNotifier.sendEmail(patient.getEmail().value(), message);
whatsAppNotifier.sendWhatsApp(patient.getPhoneNumber().value(), message);
}
}