No meu projeto, na classe Consulta tenho que manter o construtor public Consulta(Object o, Medico medico, Paciente paciente, LocalDateTime data) { }
pois se não o programa me retorna o seguinte erro: java: no suitable constructor found for Consulta(,med.voll.api.domain.medico.Medico,med.voll.api.domain.paciente.Paciente,java.time.LocalDateTime) constructor med.voll.api.domain.consulta.Consulta.Consulta() is not applicable (actual and formal argument lists differ in length) constructor med.voll.api.domain.consulta.Consulta.Consulta(java.lang.Long,med.voll.api.domain.medico.Medico,med.voll.api.domain.paciente.Paciente,java.time.LocalDateTime,med.voll.api.controller.MotivoCancelamento) is not applicable (actual and formal argument lists differ in length)
ele acusa erro na classe AgendaDeConsultas, na parte var consulta = new Consulta(null, medico, paciente, dados.data());:
package med.voll.api.domain.consulta;
import med.voll.api.controller.DadosCancelamentoConsulta; 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 AgendaDeConsultas {
@Autowired
private ConsultaRepository consultaRepository;
@Autowired
private MedicoRepository medicoRepository;
@Autowired
private PacienteRepository pacienteRepository;
private List<ValidadorAgendamentoDeConsulta> validadores;
public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados){
if (!pacienteRepository.existsById(dados.idPaciente())){
throw new ValidacaoException("Id do paciente informada não existe!");
}
if (dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())){
throw new ValidacaoException("Id do paciente informada não existe!");
}
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = medicoRepository.findById(dados.idMedico()).get();
var consulta = new Consulta(null, medico, paciente, dados.data());
consultaRepository.save(consulta);
return new DadosDetalhamentoConsulta(consulta);
}
private Medico escolherMedico(DadosAgendamentoConsulta dados){
if (dados.idMedico() != null){
return medicoRepository.getReferenceById(dados.idMedico());
}
if (dados.especialidade() == null){
throw new ValidacaoException("Especialidade é obrigatória quando o médico não é escolhido!");
}
return medicoRepository.escolherMedicoAleatorioLivreNaData(dados.especialidade(), dados.data());
}
public void cancelar(DadosCancelamentoConsulta dados) {
if (!consultaRepository.existsById(dados.idConsulta())){
throw new ValidacaoException("Id da consulta não existe!");
}
var consulta = consultaRepository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivo());
}
}
o @AllArgsConstructor não serve pra emular esses tipos de construtores?