Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haz como yo hice

public record DatosCancelacionConsulta(

    @NotNull
    Long idConsulta,

    @NotNull
    MotivoCancelacion motivo

) {
}

public enum MotivoCancelacion {

PACIENTE_NO_QUISO_CONTINUAR,
CANCELACION_MEDICO,
OTROS

}

public interface ValidadorCancelacionDeConsultas {

void validar(DatosCancelacionConsulta datos);

}

@Component
public class ValidadorCancelacionConAnticipacion implements ValidadorCancelacionDeConsultas {

@Autowired
private ConsultaRepository consultaRepository;

@Override
public void validar(DatosCancelacionConsulta datos) {

    var consulta = consultaRepository.getReferenceById(datos.idConsulta());
    var ahora = LocalDateTime.now();

    if (consulta.getFecha().isBefore(ahora.plusHours(24))) {
        throw new ValidacionException(
                "La consulta solo puede cancelarse con al menos 24 horas de anticipación."
        );
    }
}

}

@Service
public class ReservaDeConsultas {

@Autowired
private ConsultaRepository consultaRepository;

@Autowired
private List<ValidadorCancelacionDeConsultas> validadoresCancelacion;

@Transactional
public void cancelar(DatosCancelacionConsulta datos) {

    if (!consultaRepository.existsById(datos.idConsulta())) {
        throw new ValidacionException("El id de la consulta informado no existe.");
    }

    validadoresCancelacion.forEach(v -> v.validar(datos));

    var consulta = consultaRepository.getReferenceById(datos.idConsulta());
    consulta.cancelar(datos.motivo());
}

alter table consultas add column motivo_cancelacion varchar(100);

1 respuesta

Hola David,

Gracias por compartir tu código con nosotros. Es muy bueno ver cómo vas poniendo en práctica lo que aprendes.

Te recomiendo que puedas interactuar con el resto de nuestros compañeros por nuestro Discord.

En virtud de que en Discord el alcance es mayor, la interacción es inmediata y llega a más compañeros, y el foro solo quedaría para esclarecer cualquier duda que puedas tener sobre el contenido de los cursos.

De esa manera, si quieres seguir compartiendo tus soluciones y proyectos, sea por el Discord — con certeza por ahí llegará a más personas.

¡Gracias nuevamente!

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. ¡Continúa con tus estudios!