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());
}
}