创建名为“citaController”的 bean 时出错

问题描述 投票:0回答:1

我有以下错误,我不知道还能做什么来修复它,我寻找的一切都不起作用:

创建名为“citaController”的 bean 时出错:通过字段“citaRepository”表达的依赖关系不满足:创建在 com.example.demo.repository.CitaRepository 中定义的名为“citaRepository”的 bean 时出错。CitaRepository 在 GestionClinicaOdontologicaApplication 上声明的 @EnableJpaRepositories 中定义:不是托管类型:类 com.example.demo.entity.Cita

Cita 控制器:

package com.example.demo.controller;
`
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.config.AuthService;
import com.example.demo.entity.Cita;
import com.example.demo.entity.Odontologo;
import com.example.demo.repository.CitaRepository;
import com.example.demo.repository.OdontologoRepository;

@Controller
@RequestMapping(path = "/cita")
public class CitaController {
    // Repositorio para acceder a las citas en la base de datos
    @Autowired
    private AuthService authService;
    @Autowired
    private CitaRepository citaRepository;
    @Autowired
    private OdontologoRepository odontologoRepository;

    // Endpoint para crear una nueva cita
    @PostMapping(path = "/new")
    public @ResponseBody String nuevo(@RequestParam String fecha, @RequestParam LocalTime hora,
            @RequestParam String motivo, @RequestParam String tratamiento, @RequestParam int cedula_paciente,
            @RequestParam int id_odontologo) {
        // Crear una nueva cita con los parámetros proporcionados
        Cita c = new Cita();
        c.setFecha(fecha);
        c.setHora(hora);
        c.setMotivo(motivo);
        c.setTratamiento(tratamiento);
        c.setCedula_paciente(cedula_paciente);
        c.setId_odontologo(id_odontologo);

        // Guardar la nueva cita en la base de datos
        citaRepository.save(c);
        return "Listo";
    }

    // Endpoint para mostrar el formulario de creación de nueva cita
    @GetMapping("/new_frontend")
    public String motrarFormularioNuevo() {
        return "formularioNuevaCita";
    }

    // Endpoint para crear una nueva cita a través de un formulario web
    @PostMapping("/new_frontend")
    public String nuevo(@RequestParam String fecha, @RequestParam LocalTime hora, @RequestParam String motivo,
            @RequestParam String tratamiento, @RequestParam int cedula_paciente, @RequestParam int id_odontologo,
            Model modelo) {
        Cita c = new Cita();
        c.setFecha(fecha);
        c.setHora(hora);
        c.setMotivo(motivo);
        c.setTratamiento(tratamiento);
        c.setCedula_paciente(cedula_paciente);
        c.setId_odontologo(id_odontologo);

        citaRepository.save(c);

        // Agregar un mensaje para mostrar en la vista de respuesta
        modelo.addAttribute("mensaje", "Cita creada correctamente");
        return "respuestaCreacionCita"; // Devolver la vista de respuesta
    }

    // Endpoint para listar todas las citas en formato JSON
    @GetMapping(path = "/all")
    public @ResponseBody Iterable<Cita> listarTodos() {
        return citaRepository.findAll();
    }

    // Endpoint para listar todas las citas y mostrarlas en una vista web
    @GetMapping(path = "/all_frontend")
    public String listarTodos_frontend(Model modelo) {
        Authentication authentication = authService.getUsuarioAutenticado();
        if (authentication != null && authentication.isAuthenticated()) {
            Object principal = authentication.getPrincipal();

            // Obtener el ID del odontólogo autenticado
            int idOdontologoAutenticado = obtenerIdOdontologo(principal);

            // Filtrar las citas según el ID del odontólogo autenticado
            ArrayList<Cita> listaFiltrada = (ArrayList<Cita>) ((ArrayList<Cita>) (citaRepository.findAll())).stream()
                    .filter(cita -> cita.getId_odontologo() == idOdontologoAutenticado).collect(Collectors.toList());

            modelo.addAttribute("citas", listaFiltrada);

            return "listadoCitas";
        } else {
            // Manejar usuario no autenticado
            return "redirect:/login"; // Redireccionar a la página de inicio de sesión o manejar de acuerdo a lo
                                        // apropiado
        }
    }

    private int obtenerIdOdontologo(Object userDetails) {
        if (userDetails instanceof UserDetails) {
            UserDetails userDetails1 = (UserDetails) userDetails;
            String username = userDetails1.getUsername();
            Odontologo odontologo = odontologoRepository.findByEmail(username);
            if (odontologo != null) {
                return odontologo.getId();
            }
        }
        return 0; // O lanzar una excepción apropiada si no se puede obtener el ID
    }

    @GetMapping(path = "/find")
    public @ResponseBody Cita buscarId(@RequestParam int id) {
        return citaRepository.findById(id).get();
    }

    @PostMapping(path = "/update/{id}")
    public @ResponseBody String actualizar(@PathVariable int id, @RequestParam String fecha,
            @RequestParam LocalTime hora, @RequestParam String motivo, @RequestParam String tratamiento,
            @RequestParam int cedula_paciente, @RequestParam int id_odontologo) {
        Cita c = buscarId(id);
        c.setFecha(fecha);
        c.setHora(hora);
        c.setMotivo(motivo);
        c.setTratamiento(tratamiento);
        c.setCedula_paciente(cedula_paciente);
        c.setId_odontologo(id_odontologo);

        citaRepository.save(c);

        return "Listo";
    }

    @GetMapping("/update_frontend/{id}")
    public String mostrarFormularioCita(@PathVariable int id, Model model) {
        Cita cita = buscarId(id);
        model.addAttribute("cita", cita);
        return "formularioActualizarCita";
    }

    @PostMapping("/update_frontend/{id}")
    public String actualizarDesdeFrontend(@PathVariable int id, @RequestParam String fecha,
            @RequestParam LocalTime hora, @RequestParam String motivo, @RequestParam String tratamiento,
            @RequestParam int cedula_paciente, @RequestParam int id_odontologo, Model model) {
        Cita c = buscarId(id);
        c.setFecha(fecha);
        c.setHora(hora);
        c.setMotivo(motivo);
        c.setTratamiento(tratamiento);
        c.setCedula_paciente(cedula_paciente);
        c.setId_odontologo(id_odontologo);

        citaRepository.save(c);

        model.addAttribute("mensaje", "Cita actualizada correctamente");
        return "respuestaActualizacionCita";
    }

    @GetMapping("/delete/{id}")
    public String mostrarConfirmacionEliminar(@PathVariable int id, Model model) {
        Cita cita = citaRepository.findById(id).get();
        model.addAttribute("cita", cita);
        return "confirmarEliminarCita";
    }

    @PostMapping("/delete/{id}")
    public String eliminar(@PathVariable int id) {
        citaRepository.deleteById(id);
        return "redirect:/cita/all_frontend";
    }

    // Endpoint para mostrar la agenda diaria de citas en una vista web
    @GetMapping("/agenda-diaria")
    public String mostrarAgendaDiaria(
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
        // Obtener la fecha actual si no se proporciona una fecha específica
        LocalDate fechaActual = fecha != null ? fecha : LocalDate.now();

        // Obtener las citas programadas para la fecha actual
        List<Cita> citasDelDia = citaRepository.findByFecha(fechaActual.toString());

        // Pasar las citas a la vista
        model.addAttribute("fechaActual", fechaActual);
        model.addAttribute("citas", citasDelDia);

        return "agenda-diaria";
    }

    @GetMapping("/agenda-semanal")
    public String mostrarAgendaSemanal(
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
        // Obtener la fecha inicial y final de la semana
        LocalDate fechaInicio = getFechaInicioSemana(fecha);
        LocalDate fechaFin = fechaInicio.plusDays(6);

        // Obtener las citas programadas para la semana
        List<Cita> citasSemana = citaRepository.findByFechaBetween(fechaInicio.toString(), fechaFin.toString());

        // Agrupar las citas por fecha
        Map<Object, List<Cita>> citasAgrupadas = citasSemana.stream()
                .collect(groupingBy(cita -> LocalDate.parse(cita.getFecha(), DateTimeFormatter.ISO_DATE)));

        // Pasar los datos a la vista
        model.addAttribute("fechaInicio", fechaInicio);
        model.addAttribute("fechaFin", fechaFin);
        model.addAttribute("citasAgrupadas", citasAgrupadas);

        return "agenda-semanal";
    }

    private LocalDate getFechaInicioSemana(LocalDate fecha) {
        if (fecha == null) {
            fecha = LocalDate.now();
        }
        // Obtener el lunes de la semana actual
        return fecha.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
    }

    @GetMapping("/agenda-mensual")
    public String mostrarAgendaMensual(
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
        // Obtener el mes y año actual
        YearMonth mesActual = fecha != null ? YearMonth.from(fecha) : YearMonth.now();

        // Obtener las citas programadas para el mes actual
        List<Cita> citasMes = citaRepository.findByFechaBetween(mesActual.atDay(1).toString(),
                mesActual.atEndOfMonth().toString());

        // Agrupar las citas por fecha
        Map<Object, List<Cita>> citasAgrupadas = citasMes.stream()
                .collect(Collectors.groupingBy(cita -> LocalDate.parse(cita.getFecha(), DateTimeFormatter.ISO_DATE)));

        // Pasar los datos a la vista
        model.addAttribute("mesActual", mesActual);
        model.addAttribute("citasAgrupadas", citasAgrupadas);

        return "agenda-mensual";
    }

}`

Cita 实体:

`package com.example.demo.entity;

import java.time.LocalTime;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Cita {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private LocalTime hora;
    private String motivo, tratamiento, fecha;
    private int cedula_paciente, id_odontologo;
    
    public int getCedula_paciente() {
        return cedula_paciente;
    }

    public void setCedula_paciente(int cedula_paciente) {
        this.cedula_paciente = cedula_paciente;
    }

    public String getFecha() {
        return fecha;
    }
    
    public void setFecha(String fecha) {
        this.fecha = fecha;
    }
    
    public LocalTime getHora() {
        return hora;
    }
    
    public void setHora(LocalTime hora) {
        this.hora = hora;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getMotivo() {
        return motivo;
    }
    
    public void setMotivo(String motivo) {
        this.motivo = motivo;
    }
    
    public String getTratamiento() {
        return tratamiento;
    }
    
    public void setTratamiento(String tratamiento) {
        this.tratamiento = tratamiento;
    }

    public int getId_odontologo() {
        return id_odontologo;
    }

    public void setId_odontologo(int id_odontologo) {
        this.id_odontologo = id_odontologo;
    }
}`

Cita 存储库:

`package com.example.demo.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.example.demo.entity.Cita;

@Repository
public interface CitaRepository extends CrudRepository<Cita, Integer> {
    @Query("SELECT c FROM Cita c WHERE c.fecha = :fecha")
    List<Cita> findByFecha(@Param("fecha") String fecha);

    @Query("SELECT c FROM Cita c WHERE c.fecha BETWEEN :fechaInicio AND :fechaFin")
    List<Cita> findByFechaBetween(@Param("fechaInicio") String fechaInicio, @Param("fechaFin") String fechaFin);
}`

我的应用程序:

`package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@ComponentScan(basePackages="com.example.demo")
@EntityScan("com.example.demo.entity")
@EnableJpaRepositories("com.example.demo.repository")
public class GestionClinicaOdontologicaApplication {

    public static void main(String[] args) {
        SpringApplication.run(GestionClinicaOdontologicaApplication.class, args);
    }

}`

我已经尝试了一切,将路线放入应用程序中,更改citaController,删除东西,我不知道该怎么办了。

java spring spring-boot spring-data-jpa
1个回答
0
投票
@SpringBootApplication
@EnableJpaRepositories("repositories")
@ComponentScan({"controllers", "repositories"})
© www.soinside.com 2019 - 2024. All rights reserved.