fica so isso no terminal
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
fica so isso no terminal
Oi!
Manda aqui o código das suas classes Dto, Controller e Service. E verifica também no seu banco de dados se os registros estão cadastrados certinhos.

Link dos codigos pedidos: https://drive.google.com/file/d/1HQDOH_0RgIuVtmryNfRhspI3-rCYxgzZ/view?usp=sharing
Deve ser nas classe AgendaDeConsultas que as mensagens de validação estão invertidas. Deveria estar assim:
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 médico informado não existe!");
}
Não esta salvando no banco de dados a consulta

Deu erro 403. Verifica se enviou o header com o token nessa requisição.
sim foi enviado
esta sendo enviado junto ao topico da requisição porem fica 403
Veja se é um dos casos citados aqui: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/130894
olhei o topico mais não ajudou tipo quando fui executar la aparece isso no terminal: Hibernate:
select
u1_0.id,
u1_0.login,
u1_0.senha
from
usuarios u1_0
where
u1_0.login=?
2023-07-27T17:14:11.063-03:00 WARN 1348 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.time.LocalDateTime from String "2023-10-10T:00": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2023-10-10T:00' could not be parsed at index 11]
A data da consulta no json está sendo enviada no formato errado: 2023-10-10T:00 (está faltando a hora)
Deveria ser: 2023-10-10T10:00
ajeitei so que da esse erro :
https://drive.google.com/file/d/1ZUz3qQ-FY57z_5OkGimYeFBMyMg7pR_Y/view?usp=drive_link
Confere na sua interface ConsultaRespository se os métodos estão recebendo como parâmetro LocalDateTime e não LocalDate:
public interface ConsultaRepository extends JpaRepository<Consulta, Long> {
boolean existsByPacienteIdAndDataBetween(Long idPaciente, LocalDateTime primeiroHorario, LocalDateTime ultimoHorario);
boolean existsByMedicoIdAndDataAndMotivoCancelamentoIsNull(Long idMedico, LocalDateTime data);
}
package med.voll.api.domain.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 idMedico, LocalDateTime data);
} esta assim o meu
Em algum lugar no seu código está utilizando LocalDate ao invés de LocalDateTime.
Confere nas classes: DadosAgendamentoConsulta, Consulta e nas classes de validação de agendamento de consulta.
package med.voll.api.domain.consulta;
import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import med.voll.api.domain.medico.Medico; import med.voll.api.domain.paciente.Paciente;
import java.time.LocalDate; import java.time.LocalDateTime;
@Table(name = "consultas") @Entity(name = "Consulta") @Getter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(of = "id") public class Consulta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "medico_id")
private Medico medico;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "paciente_id")
private Paciente paciente;
private LocalDate data;
public Consulta(Long id, Medico medico, Paciente paciente, LocalDateTime data) {
}
}
esse construtor ai public Consulta(Long id, Medico medico, Paciente paciente, LocalDateTime data) { } a ide me obrigou a colocar nessa classe pois la em AgendadeConsulta nesse trecho de codigo var consulta = new Consulta(null, medico, paciente, dados.data()); em dados.data ficava um erro tracejado
É o atributo data da sua classe Consulta que está como LocalDate. Altere para LocalDateTime:
private LocalDateTime data;
Com isso você vai poder apagar esse construtor.
modifiquei ai ja pra eh deu tudo o certo agora quando cadastro um novo paciente e um novo medico e atribuo la o agendamento ta caindo nesse problema "Paciente já possui uma Consulta agendada nesse dia " mesm colocando pra um dia e horario que nao tem ninguem
Verifica se o código da sua classe ValidadorPacienteSemOutraConsultaNoDia está certinho:
@Component
public class ValidadorPacienteSemOutraConsultaNoDia implements ValidadorAgendamentoDeConsulta {
@Autowired
private ConsultaRepository repository;
public void validar(DadosAgendamentoConsulta dados) {
var primeiroHorario = dados.data().withHour(7);
var ultimoHorario = dados.data().withHour(18);
var pacientePossuiOutraConsultaNoDia = repository.existsByPacienteIdAndDataBetween(dados.idPaciente(), primeiroHorario, ultimoHorario);
if (pacientePossuiOutraConsultaNoDia) {
throw new ValidacaoException("Paciente já possui uma consulta agendada nesse dia");
}
}
}
pronto ta funcionando tudo obg professor o senhor e fera
Top!
Bons estudos! :)
quando entro no endereço http://localhost:8080/swagger-ui.html o seguinte erro apareçe O acesso a localhost foi negadoVocê não tem autorização para ver esta página. HTTP ERROR 403
@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").permitAll();
req.requestMatchers("/v3/api-docs/", "/swagger-ui.html", "/swagger-ui/").permitAll();
req.anyRequest().authenticated();
})
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class) .build();
}
'SecurityScheme' is abstract; cannot be instantiated e Cannot resolve symbol 'Type'
'SecurityScheme' is abstract; cannot be instantiated e Cannot resolve symbol 'Type' na classe SpringDocConfiguration
@Configuration
public class SpringDocConfiguration {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearer-key", new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")));
}
}
No curso foi utilizada a versão 2.0.2 da biblioteca:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.2</version>
</dependency>
Utilize essa mesma versão para evitar problemas.
mesmo usando esta versão continua os erros
o que faço mestre?
não estou conseguindo concluir a ultima etapa do curso por causa desse erro
Qual versão do Spring Boot no seu projeto?