3
respostas

Erro aoi retornar o id do médico quando só é informado a rspecialidade

Pessoal, boa tarde!

Estou enfrentando problemas em retornar do médico referente a especialidade desejada. Segue link do meu repositório: https://github.com/YanVelasco/YanVelasco-med.voll-api

package br.com.yanvelasco.api.domain.consultas.service;

import java.util.List;

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

import br.com.yanvelasco.api.domain.consultas.dto.ConsultaDTO; import br.com.yanvelasco.api.domain.consultas.repository.ConsultaRepository; import br.com.yanvelasco.api.domain.consultas.validations.ValidadorAgendamentoDeConsulta; import br.com.yanvelasco.api.domain.medico.entity.Medico; import br.com.yanvelasco.api.domain.medico.repository.MedicoRepository; import br.com.yanvelasco.api.domain.paciente.repository.PacienteRepository; import br.com.yanvelasco.api.infra.exceptions.EspecialidadeException; import br.com.yanvelasco.api.infra.exceptions.UserNotFound; import br.com.yanvelasco.api.domain.consultas.entity.Consulta;

@Service public class AgendaDeConsultas {

@Autowired
private ConsultaRepository consultaRepository;

@Autowired
private MedicoRepository medicoRepository;

@Autowired
private PacienteRepository pacienteRepository;

@Autowired
private List<ValidadorAgendamentoDeConsulta> validadores;

public void execute(ConsultaDTO consultaDTO) {

    validadores.forEach(v -> v.execute(consultaDTO));

    var medico = escolherMedico(consultaDTO);

    var paciente = pacienteRepository.findById(consultaDTO.idPaciente())
            .orElseThrow(() -> new UserNotFound("Paciente não encontrado"));

    var consulta = Consulta.builder()
            .medico(medico)
            .paciente(paciente)
            .data(consultaDTO.data())
            .build();

    consultaRepository.save(consulta);

}

private Medico escolherMedico(ConsultaDTO consultaDTO) {

    if (consultaDTO.idMedico() != null) {
        return medicoRepository.getReferenceById(consultaDTO.idMedico());
    }
    
    if (consultaDTO.especialidade() == null) {
        throw new EspecialidadeException("Você deve informar o médico ou a especialidade");
    }
    
    return medicoRepository.escolherMedicoPorEspecialidade(consultaDTO.especialidade(), consultaDTO.data());
}

}

package br.com.yanvelasco.api.domain.medico.repository;

import java.time.LocalDateTime; import java.util.Optional; import java.util.UUID;

import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository;

import br.com.yanvelasco.api.domain.medico.entity.Especialidade; import br.com.yanvelasco.api.domain.medico.entity.Medico;

@Repository public interface MedicoRepository extends JpaRepository<Medico, UUID> { Optional findByNomeOrEmail(String nome, String email);

    Page<Medico> findAllByAtivoTrue(Pageable paginacaoPageable);

    @Query("SELECT m FROM Medico m " +
                    "WHERE m.ativo = true " +
                    "AND m.especialidade = :especialidade " +
                    "AND m.id NOT IN (SELECT c.medico.id FROM Consulta c WHERE c.data = :data) " +
                    "ORDER BY FUNCTION('RANDOM') " +
                    "LIMIT 1")
    Medico escolherMedicoPorEspecialidade(Especialidade especialidade, LocalDateTime data);

    @Query("""
                    SELECT m.ativo FROM Medico m WHERE m.id= :idMedico
                    """)
    Boolean findAtivoById(UUID idMedico);

}

3 respostas

boa tarde Yan, tudo bem? qual é o erro? tem como colocar a stack trace aqui para eu dar uma olhada?

Então Isadora, na verdade, não está dando erro.

O problema é que quando eu envio apenas a especialidade do médico, ele não me retorna o id do médico.

Segue exemplo abaixo: Envio da requisição: { "idPaciente": "ad984031-418c-4681-a860-dc479123e453", "data": "22/03/2024 07:00", "especialidade": "ORTOPEDIA" }

Resposta da requisição: { "idMedico": null, "idPaciente": "ad984031-418c-4681-a860-dc479123e453", "data": "22/03/2024 07:00", "especialidade": "ORTOPEDIA" }

O id do médico volta nulo, este é o problema que estou enfrentando.

Oi!

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

No seu controller você está devolvendo como resposta o próprio DTO que chega na requisição e por isso ele volta sem id do médico, pois está chegando sem o id do médico na requisição.