Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
5
respuestas

Error al ejecutar spring con las nuevas funcionalidades

Hola, me pueden a ayudar, ya que al compilarlo me sale estos errores Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad Este es el código de las nuevas cosas implementadas

package med.voll.api.controller;

import jakarta.validation.Valid;
import med.voll.api.domain.consulta.DatosAgendarConsultas;
import med.voll.api.domain.consulta.DatosDetalleConsulta;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/consultas")
public class ConsultaController {

    @PostMapping
    @Transactional
    public ResponseEntity agendar(@RequestBody @Valid DatosAgendarConsultas datos) {
        System.out.println(datos);

        return ResponseEntity.ok(new DatosDetalleConsulta(null,null,null,null));
    }
}
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.LocalDateTime;

@Table(name = "consultas")
@Entity(name = "Consulta")
@Getter //Genera getters y setters automaticamente
@NoArgsConstructor //Contructor default sin atributos
@AllArgsConstructor //Constructor con atributos
@EqualsAndHashCode(of = "id") //Para hacer las conparaciones entre medicos si son iguales
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 LocalDateTime fecha;


}
package med.voll.api.domain.consulta;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ConsultaRepository extends JpaRepository<Consulta, Long> {
}
package med.voll.api.domain.consulta;

import jakarta.validation.constraints.Future;
import jakarta.validation.constraints.NotNull;

import java.time.LocalDateTime;

public record DatosAgendarConsultas(Long id, @NotNull Long id_paciente, Long id_medico, @NotNull @Future LocalDateTime fecha) {
}
package med.voll.api.domain.consulta;

import java.time.LocalDateTime;

public record DatosDetalleConsulta(Long id, Long id_paciente, Long id_medico, LocalDateTime fecha) {
}
create table consultas(

    id bigint not null auto_increment,
    medico_id bigint not null,
    paciente_id bigint not null,
    data datetime not null,

    primary key(id),

    constraint fk_consultas_medico_id foreign key (medico_id) references medicos(id),
    constraint fk_consultas_paciente_id foreign key (paciente_id) references pacientes(id)
);
5 respuestas
solución!

Puedo notar dos errores que posiblemente puedan impedirte que el programa se ejecute. Inicialmente vas a ir a tu base de datos y eliminar todas las tablas (Cuando uno hace un migration que contiene un error, este se termina enviando, pero a medias; y por lo menos yo no tengo idea de cómo solucionarlo de otra forma.)

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Luego vas a ir a la carpeta Tarjet y vas a borrar todos los migrations

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Hecho esto también sería bueno que confirmés, utilizando ChatGPT, que tu código esté correctamente escrito (Copiás y pegás el código en ChatGPT y le pedís que lo corrija). Hecho esto vas a tener una parte del problema resuelto.

La otra parte parece ser un problema con usuarioRepository. Posiblemente no hayas escrito correctamente el name de Table o de Entity, asegurate que esté bien hecho (puede ser que por otras modificaciones en el resto de tu código provoque el problema), y también asegurate de que las clases de tu Tarjet estén correctamente ordenadas y nombradas, así cómo codeadas (Al ejecutar el programa, las clases creadas por nosotros son copiadas automáticamente en Tarjet, y puede ser que si no hiciste algo correctamente o se haya copiado cómo debe ser y eso provoque el problema. Me ha pasado)

Muchas gracias ya lo solucione, era problema de mi migrations, había tenido un error y lo tomo en cuenta y eso causo que fallara mi api, hice la solución que me dijiste y ya quedo.

Para el que le sirva, aca les dejo el codigo correcto del migrations:

create table consultas (

     id bigint not null auto_increment,
     medico_id  bigint not null,
     paciente_id  bigint not null,
     data datetime not null,

     primary key(id),

     constraint fk_consultas_medico_id foreign key(medico_id) references medicos(id),
     constraint fk_consultas_paciente_id foreign key(paciente_id) references pacientes(id)
);

Para resolver las migration hechas insatisfactoriamente deben usar este código:

delete from flyway_schema_history where success = 0;

Lo que comenta Eddy es cierto y con ello no necesitan borrar todas las tablas que ya fueron creadas, debido a que en flyway_schema_history es un tabla que crea la dependencia que estamos usando, y esta guarda todas las migraciones asi sean las fallidas. Entonces simplemente basta con borrar la migracion que fallo y listo.