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

[Bug] Deu erro

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

package med.voll.api.repository;

import med.voll.api.domain.entities.Consulta; import org.springframework.data.jpa.repository.JpaRepository;

import java.time.LocalDateTime;

public interface ConsultaRepository extends JpaRepository<Consulta, Long> {

boolean existsByPacienteIdAndDataBetween(Long idPaciente, LocalDateTime primeiroHorario, LocalDateTime ultimoHorario);

boolean existsByMedicoIdAndData(Long id);

} package med.voll.api.service;

import med.voll.api.domain.dto.DadosAgendamentoConsultaDTO; import med.voll.api.domain.entities.Consulta; import med.voll.api.domain.entities.Medico; import med.voll.api.domain.validacoes.ValidadorAgendamentoDeConsulta; import med.voll.api.infra.exceptions.ValidacaoException; import med.voll.api.repository.ConsultaRepository; import med.voll.api.repository.MedicoRepository; import med.voll.api.repository.PacienteRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import java.util.List;

@Service public class AgendaConsultaService {

@Autowired
private ConsultaRepository consultaRepository;

@Autowired
private PacienteRepository pacienteRepository;

@Autowired
private MedicoRepository medicoRepository;

@Autowired
private List<ValidadorAgendamentoDeConsulta> validadores;

public void agendar(DadosAgendamentoConsultaDTO dados) {
    if (!pacienteRepository.existsById(dados.idPaciente())) {
        throw new ValidacaoException("Id do paciente informado não exite!");
    }
    if (dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())) {
        throw new ValidacaoException("Id do médico informado não exite!");
    }

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

   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(DadosAgendamentoConsultaDTO dados) {
    if (dados.idMedico() != null) {
        return medicoRepository.getReferenceById(dados.idMedico());
    }

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

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

}

3 respostas
solução!

Oi Francisco, eu fiz esse curso aqui na Alura. Mas o CODE Java que você está compartilhando não ficou claro.

Mas deu para entender isso aqui

Melhorias e Correções:

  1. Correção de Erros de Digitação: Corrigi "exite" para "existe" nas mensagens de erro.
  2. Uso Correto de &&: Corrigi a condição && que estava codificada como &&.
  3. Tipagem de validadores: Adicionei a tipagem List para garantir que a lista contenha objetos do tipo ValidadorAgendamentoDeConsulta.
  4. Correção no Método existsByMedicoIdAndData: Adicionei o parâmetro LocalDateTime data para corresponder à assinatura correta do método.

Olá, consegui resolver! era apenas a @Query que estava errada

antes: @Query(""" select p.ativo from paciente p where p.id = :id """) boolean findAtivoById(Long id);

depois:
 @Query("""
        select p.ativo
        from Paciente p
        where
        p.id = :id
        """)
boolean findAtivoById(Long id);

Que maravilha