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

[Sugerencia] Sobre las Validaciones

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

import com.med.voll.api.domain.ValidacionException;
import com.med.voll.api.domain.consulta.DatosReservaConsulta;
import com.med.voll.api.domain.consulta.IConsultaRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ValidadorPacienteSinOtraConsultaEnElMismoDia {

    private final IConsultaRepository consultaRepository;

    public ValidadorPacienteSinOtraConsultaEnElMismoDia(IConsultaRepository consultaRepository) {
        this.consultaRepository = consultaRepository;
    }

    public void validar(DatosReservaConsulta datos) {
        var primerHorario = datos.fecha().withHour(7);
        var ultimoHorario = datos.fecha().withHour(18);
        var pacienteTieneOtraConsultaEnElDia = consultaRepository.existsByPacienteIdAndFechaBetween(datos.idPaciente(), primerHorario, ultimoHorario);
           if (pacienteTieneOtraConsultaEnElDia) {
            throw new ValidacionException("Paciente ya tiene una consulta reservada para ese dia!");
        }
    }
}

Spring recomienda la inyección por constructor desde la versión 4.3, ya que es más segura, facilita las pruebas unitarias y hace el código más explícito. El profe se olvido de colocar los @Component en todas las validaciones.

1 respuesta

¡Hola Christian, espero que estés bien!

Gracias por compartir tu código y tu sugerencia. Tienes toda la razón al mencionar la importancia de la inyección de dependencias por constructor, ya que es una práctica recomendada por Spring desde la versión 4.3. Esto mejora la seguridad, facilita las pruebas unitarias y hace que el código sea más claro y explícito.

En cuanto a tu observación sobre el uso de @Component, es esencial asegurarse de que todas las clases de validación estén anotadas correctamente para que Spring pueda gestionarlas como beans. Esto permite que las validaciones se integren adecuadamente en el contexto de la aplicación.

Por ejemplo, en tu clase ValidadorPacienteSinOtraConsultaEnElMismoDia, ya has utilizado el constructor para la inyección de dependencias, lo cual es excelente. Solo asegúrate de que todas las clases de validación estén anotadas con @Component para que Spring las detecte automáticamente:

@Component
public class ValidadorPacienteSinOtraConsultaEnElMismoDia {
    // tu código aquí
}

De esta manera, cada clase de validación estará lista para ser utilizada dentro del sistema de reservas de consultas. Si alguna clase de validación no tiene el @Component, Spring no podrá gestionarla como bean, lo que podría causar problemas al intentar inyectarlas en otros componentes.

Espero que esta información te sea útil y te ayude a estructurar mejor tu proyecto. ¡Bons estudos!