Estou com 2 problemas...
Primeiro
Quando vou agendar uma consulta somente colocando a especialidade no insomnia da erro 500 "Erro: Quando medico não é escolhido inserir a especialidade é obrigatorio!"
{
"idPaciente": 1,
"especialidade": "ORTOPEDIA",
"data": "23/04/2024 10:00"
}
@Service
public class AgendaDeConsultas {
@Autowired
ConsultaRepository consultaRepository;
@Autowired
MedicoRepository medicoRepository;
@Autowired
PacienteRepository pacienteRepository;
@Autowired
private List<ValidadorAgendamentoConsulta> validadores;
public DadosoDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados){
if(!pacienteRepository.existsById(dados.idPaciente())) {
throw new ValidacaoException("Id do paciente informado não existe");
}
if(dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())){
throw new ValidacaoException("Id do medico informado não existe");
}
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = escolherMedicos(dados);
var consulta = new Consulta(null, medico, paciente, dados.data(), null);
consultaRepository.save(consulta);
return new DadosoDetalhamentoConsulta(consulta);
}
private Medico escolherMedicos(DadosAgendamentoConsulta dados) {
if (dados.idMedico() != null){
return medicoRepository.getReferenceById(dados.idMedico());
}
if (dados.especialidade() != null){
throw new ValidacaoException("Quando medico não é escolhido inserir a especialidade é obrigatorio!");
}
return medicoRepository.escolherMedicoAleatorioLivre(dados.especialidade(), dados.data());
}
public void cancelar(DadosCancelamentoConsulta dados) {
if (!consultaRepository.existsById(dados.idConsulta())) {
throw new ValidacaoException("Id da consulta informado não existe!");
}
var consulta = consultaRepository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivo());
}
}
Segundo problema
Eu segui o curso e tive outro problema na parte do SpringDoc, ele da acesso negado no http://localhost:8080/v3/api-docs ou /swagger-ui
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(csrf -> csrf.disable())
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(req -> {
req.requestMatchers(HttpMethod.POST, "/login", "/v3/api-docs","/swagger-ui.html", "/swagger-ui/**").permitAll();
// req.requestMatchers(HttpMethod.DELETE, "/medicos").hasRole(ADMIN);
// req.requestMatchers(HttpMethod.DELETE, "/pacientes").hasRole(ADMIN);
req.anyRequest().authenticated();
})
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}