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

erro 500 ao dar put na consulta

https://github.com/brunoffraga/apiRepository

erros

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2023-05-04T22:06:07.994-03:00 ERROR 7716 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: med.voll.api.domain.ValidacaoException] with root cause

med.voll.api.domain.ValidacaoException: null
    at med.voll.api.domain.consulta.AgendaDeConsulta.agendar(AgendaDeConsulta.java:32) ~[classes/:na]
    at med.voll.api.controller.ConsultaController.agenda(ConsultaController.java:28) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) ~[spring-web-6.0.7.jar:6.0.7]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) ~[spring-web-6.0.7.jar:6.0.7]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.7.jar:6.0.7]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.7.jar:6.0.7]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.7.jar:6.0.7]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.7.jar:6.0.7]
5 respostas

Olá

Esse erro geralmente indica um problema interno no servidor, o que pode ser causado por diversos motivos, como problemas na configuração do projeto ou erros no código.

No seu caso, o erro parece estar sendo causado pela classe AgendaDeConsulta, na linha 32, onde ocorre uma exceção de ValidacaoException. Verifique se essa exceção está sendo tratada corretamente no seu código e se as validações necessárias estão sendo realizadas antes de executar a consulta.

Certo o que esta de errado aqui.

package med.voll.api.domain.consulta;

import med.voll.api.domain.ValidacaoException;
import med.voll.api.domain.consulta.validacoes.ValidadorAgendamentoDeConsulta;
import med.voll.api.domain.medico.Medico;
import med.voll.api.domain.medico.MedicoRepository;
import med.voll.api.domain.paciente.PacienteRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AgendaDeConsulta {

    @Autowired
    private ConsultaRepository consultaRepository;

    @Autowired
    private MedicoRepository medicoRepository;

    @Autowired
    private PacienteRepository pacienteRepository;

    @Autowired
    private List<ValidadorAgendamentoDeConsulta> validadores;
    public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados){

        if (!pacienteRepository.existsById(dados.idPaciente())){
            throw new ValidacaoException("Id do paciente informado não existe");    //linha 30 onde esta o erro
        }

        if (dados.idMedico()!= null && !medicoRepository.existsById(dados.idMedico())){
            throw new ValidacaoException("Id do médico informado não exite");    //34 onde esta o outro erro quando eu mando um paciente que não tem
        }

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

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

        return new DadosDetalhamentoConsulta(consulta);
    }

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

        if (dados.especialidade() == null){
            throw new ValidacaoException("Especialidade é obrigatoria quando medico não for escolido");
        }

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

náo sei o que esta acontecendo.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi!

Deve ser erro de validação mesmo, como id do médico ou do paciente não cadastrado no banco.

Provavelmete você não adicionou na classe de tratamento de erros o tratamento para ValidacaoException, e com isso está sendo devolvido erro 500 ao invés de erro 400.

solução!

Obrigado pela ajuda, vocês são feras de mais. Tinha dois erros que eu estava cometendo.

1 - importando errado. import med.voll.api.domain.ValidacaoException;

2 - Não coloquei o string mensagem no super. public class ValidacaoException extends RuntimeException {

public ValidacaoException(String mensagem) {
    super(mensagem);
}

}