1
resposta

[Bug] Erro ao iniciar a aplicação

Após implementar o agendamento de consulta começou a dar esse erro ao iniciar a aplicação:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consultaController': Unsatisfied dependency expressed through field 'agenda': Error creating bean with name 'agendaDeConsultas': Unsatisfied dependency expressed through field 'medicoRepository': Error creating bean with name 'medicoRepository' defined in med.voll.api.domain.medico.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract med.voll.api.domain.medico.Medico med.voll.api.domain.medico.MedicoRepository.escolherMedicoAleatorioDisponivel(med.voll.api.domain.medico.Especialidade,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract med.voll.api.domain.medico.Medico med.voll.api.domain.medico.MedicoRepository.escolherMedicoAleatorioDisponivel(med.voll.api.domain.medico.Especialidade,java.time.LocalDateTime)

Meu código ta assim:

package med.voll.api.controller;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

import jakarta.transaction.Transactional; import jakarta.validation.Valid; import med.voll.api.domain.consulta.AgendaDeConsultas; import med.voll.api.domain.consulta.DadosAgendamentoConsulta; import med.voll.api.domain.consulta.DadosDetalhamentoConsulta;

@RestController @RequestMapping("/consultas") public class ConsultaController {

@Autowired
private AgendaDeConsultas agenda;

@PostMapping
@Transactional
public ResponseEntity<Object> agendar(@RequestBody @Valid DadosAgendamentoConsulta dados) {
    agenda.agendar(dados);
    return ResponseEntity.ok(new DadosDetalhamentoConsulta(null, null, null, null));
}

}

package med.voll.api.domain.consulta;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import med.voll.api.domain.ValidacaoException; import med.voll.api.domain.medico.Medico; import med.voll.api.domain.medico.MedicoRepository; import med.voll.api.domain.paciente.PacienteRepository;

@Service public class AgendaDeConsultas {

@Autowired    
private ConsultaRepository consultaRepository;

@Autowired
private MedicoRepository medicoRepository;

@Autowired
private PacienteRepository pacienteRepository;

public void agendar(DadosAgendamentoConsulta dados) {
    if(dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())) {
        throw new ValidacaoException("ID do médico informado não existe.");
    }

    if(!pacienteRepository.existsById(dados.idPaciente())) {
        throw new ValidacaoException("ID do paciente informado não existe.");
    }

    var medico = escolherMedico(dados);
    var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
    var consulta = new Consulta(null, medico, paciente, dados.data());
    consultaRepository.save(consulta);
}

private Medico escolherMedico(DadosAgendamentoConsulta dados) {
    if(dados.idMedico() != null) {
        return medicoRepository.getReferenceById(dados.idMedico());
    }

    if(dados.especialidade() == null) {
        throw new RuntimeException("Especialidade não selecionada.");
    }

    return medicoRepository.escolherMedicoAleatorioDisponivel(dados.especialidade(), dados.data());            
}

}

1 resposta

Oi Nalbert!

O erro: Reason: Validation failed for query for method public abstract med.voll.api.domain.medico.Medico med.voll.api.domain.medico.MedicoRepository.escolherMedicoAleatorioDisponivel(med.voll.api.domain.medico.Especialidade,java.time.LocalDateTime)

MAnda aqui o código da sua interface MedicoRepository