Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

java.util.List' that could not be found

Por favor, alguém pode me ajudar com esse problema?

Field validadoresCancelamento in med.voll.api.domain.consulta.AgendaDeConsultas required a bean of type 'java.util.List' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'java.util.List' in your configuration.
import med.voll.api.domain.ValidacaoException;
import med.voll.api.domain.consulta.cancelamento.ValidadorCancelamentoDeConsulta;
import med.voll.api.domain.consulta.validacoes.agendamento.ValidadorAgendamentoDeConsulta;
import med.voll.api.domain.medico.Medico;
import med.voll.api.domain.medico.MedicoRepository;
import med.voll.api.domain.pacientes.PacienteRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class AgendaDeConsultas {

    @Autowired
    private ConsultaRepository consultaRepository;

    @Autowired
    private MedicoRepository medicoRepository;

    @Autowired
    private PacienteRepository pacienteRepository;

    @Autowired
    private List<ValidadorAgendamentoDeConsulta> validadores;

    @Autowired
    private List<ValidadorCancelamentoDeConsulta> validadoresCancelamento;

    public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados) {
        if(!pacienteRepository.existsById(dados.idPaciente())) {
            throw new ValidacaoException("Id do paciente informado não existe!");
        }

        if(dados.idMedico() != null && !medicoRepository.existsById((dados.idMedico())))
            throw new ValidacaoException("Id do médico informado não existe!");

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

        var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
        var medico = escolherMedico(dados);
        if(medico == null) {
            throw new ValidacaoException("Não existe médico disponível nessa data!");

        }

        var consulta = new Consulta(null, medico, paciente, dados.data(), null);
        consultaRepository.save(consulta);

        return new DadosDetalhamentoConsulta(consulta);
    }

    private Medico escolherMedico(DadosAgendamentoConsulta dados) {

        if(dados.idMedico() != null) {
            return medicoRepository.getReferenceById(dados.idMedico());
        }

        if(dados.especialidade() == null) {
            throw  new ValidacaoException("Especialidade é obrigatória quando o médico não for escolhido!");
        }

        return medicoRepository.escolherMedicoAleatorioLivreNaData(dados.especialidade(), dados.data());

    }


    public void cancelar(DadosCancelamentoConsulta dados) {
        if (!consultaRepository.existsById(dados.idConsulta())) {
            throw new ValidacaoException("Id da consulta informado não existe!");
        }

        validadoresCancelamento.forEach(v -> v.validar(dados));

        var consulta = consultaRepository.getReferenceById(dados.idConsulta());
        consulta.cancelar(dados.motivo());
    }
}
2 respostas
solução!

Oi!

Vendo o erro ele tá dizendo que não consegue encontrar um bean do tipo java.util.List que você tá tentando injetar no campo validadoresCancelamento na classe AgendaDeConsultas. O Spring tá pedindo pra você configurar esse bean.

O que você pode fazer é criar um @Bean no seu arquivo de configuração ou classe principal do Spring Boot, tipo algo assim:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class AppConfig {

    @Bean
    public List<ValidadorCancelamentoDeConsulta> validadoresCancelamentoList() {
        return new ArrayList<>();
    }
}

Tenha certeza de que o pacote dessa classe de configuração seja escaneado pelo Spring. Aí, quando o Spring estiver criando o contexto, ele vai ver esse método e criar um bean do tipo List<ValidadorCancelamentoDeConsulta>.

Oi,

A sua sugestão deu certo! Eu estava há dias tentando resolver. Muito obrigada!!!