Segue mensagem de erro abaixo:
ConsultaController
package med.voll.api.controller;
import jakarta.validation.Valid;
import med.voll.api.domain.consulta.AgendaDeConsultas;
import med.voll.api.domain.consulta.DadosAgendamentoConsulta;
import med.voll.api.domain.consulta.DadosCancelamentoConsulta;
import med.voll.api.domain.consulta.DadosDetalhamentoConsulta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("consultas")
public class ConsultaController {
@Autowired
private AgendaDeConsultas agenda;
@PostMapping
@Transactional
public ResponseEntity agendar(@RequestBody @Valid DadosAgendamentoConsulta dados) {
agenda.agendar(dados);
return ResponseEntity.ok(new DadosDetalhamentoConsulta(null, null, null, null));
}
@DeleteMapping
@Transactional
public ResponseEntity cancelar (@RequestBody @Valid DadosCancelamentoConsulta dados) {
agenda.cancelar(dados);
return ResponseEntity.noContent().build();
}
}
AgendaDeConsultas
package med.voll.api.controller;
import jakarta.validation.Valid;
import med.voll.api.domain.consulta.AgendaDeConsultas;
import med.voll.api.domain.consulta.DadosAgendamentoConsulta;
import med.voll.api.domain.consulta.DadosCancelamentoConsulta;
import med.voll.api.domain.consulta.DadosDetalhamentoConsulta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("consultas")
public class ConsultaController {
@Autowired
private AgendaDeConsultas agenda;
@PostMapping
@Transactional
public ResponseEntity agendar(@RequestBody @Valid DadosAgendamentoConsulta dados) {
agenda.agendar(dados);
return ResponseEntity.ok(new DadosDetalhamentoConsulta(null, null, null, null));
}
@DeleteMapping
@Transactional
public ResponseEntity cancelar (@RequestBody @Valid DadosCancelamentoConsulta dados) {
agenda.cancelar(dados);
return ResponseEntity.noContent().build();
}
}
MedicoRepository
package med.voll.api.domain.medico;
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 java.time.LocalDateTime;
public interface MedicoRepository extends JpaRepository<Medico, Long> {
Page<Medico> findAllByAtivoTrue(Pageable paginacao);
@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 RAND()
LIMIT 1
""")
Medico escolherMedicoAleatorioLivreNaData(Especialidade especialidade, LocalDateTime data);
@Query("""
SELECT m.ativo FROM Medico m
WHERE
m.id = :id
""")
Boolean findAtivoById(Long idMedico);
}