Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Sugerencia] Sobre el metodo reserva

Ese metodo siempre me arrojaba el error, que no habia medico disponible. Despues de ver el codigo encontre que estaba mal un 'if:

public DatosDetalleConsulta reservar(DatosReservaConsulta datos) {
    if (!pacienteRepository.existsById(datos.idPaciente())) {
        throw new ValidacionException("No existe un paciente con el id informado");
    }
    if (datos.idMedico() != null && !medicoRepository.existsById(datos.idMedico())) {
        throw new ValidacionException("No existe un medico con el id informado");
    }

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

    var medico = elegirMedico(datos);
    if (medico == null) {  // Aqui esta != oseo no es igual a null, por eso arrojaba siempre el error.
        throw new ValidacionException("No existe un medico disponible en ese horario");
    }
    
    var paciente = pacienteRepository.findById(datos.idPaciente()).get();
    var consulta = new Consulta(null, medico, paciente, datos.fecha(), null);
    consultaRepository.save(consulta);
    return new DatosDetalleConsulta(consulta);
}
2 respuestas

Hola Christian, espero que estés bien

Parece que has identificado correctamente el problema en tu método reservar. El error se debía a la condición incorrecta en el if que verifica si un médico está disponible. Cambiar != por == en if (medico == null) es la solución correcta para asegurar que se arroje la excepción solo cuando no hay un médico disponible.

En cuanto a la actividad que estás realizando sobre la cancelación de consultas, puedes seguir un enfoque similar al que has utilizado para la reserva. Aquí tienes un ejemplo de cómo podrías implementar la funcionalidad de cancelación:

public void cancelarConsulta(Long idConsulta, String motivoCancelacion) {
    if (motivoCancelacion == null || motivoCancelacion.isEmpty()) {
        throw new ValidacionException("Es obligatorio informar el motivo de la cancelación.");
    }

    var consulta = consultaRepository.findById(idConsulta)
        .orElseThrow(() -> new ValidacionException("No existe una consulta con el id informado"));

    if (consulta.getFecha().isBefore(LocalDateTime.now().plusHours(24))) {
        throw new ValidacionException("La reserva sólo se puede cancelar con al menos 24 horas de antelación.");
    }

    consulta.setMotivoCancelacion(motivoCancelacion);
    consultaRepository.save(consulta);
}

Este método verifica que se informe un motivo de cancelación y que la cancelación se realice con al menos 24 horas de anticipación. Asegúrate de ajustar las validaciones y el manejo de excepciones según las necesidades de tu aplicación.

Espero que esto te sea útil y te ayude a avanzar en tu proyecto. ¡Bons estudios!

Modifique mi record de 'DatosCancelamientoConsulta'

package com.med.voll.api.domain.consulta;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

@Schema(description = "Datos necesarios para cancelar una consulta existente")
public record DatosCancelamientoConsulta(
        @NotNull
        @Schema(example = "101", description = "ID de la consulta que se desea cancelar")
        Long idConsulta,
        @NotNull
        @Schema(description = "Motivo del cancelamiento. Valores permitidos: PACIENTE_DESISTIO, MEDICO_CANCELO, OTROS.",
                implementation = MotivoCancelamiento.class)
        MotivoCancelamiento motivo
) {
        public boolean isEmpty() {
                return idConsulta == null || motivo == null;
        }
}

Para que la clase 'ReservaDeConsulta' me tome '.isEmpty()'