fica so isso no terminal
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?