feat: enhance curso management by adding competency insertion and validation, update cursosArchivo and cursosVista for better handling of course data
This commit is contained in:
parent
1ea33d7097
commit
9510e9a1a1
|
@ -1,4 +1,3 @@
|
|||
// pages/api/curso.js
|
||||
import { createClient } from "@/utils/supabase";
|
||||
|
||||
export default async function handler(req, res) {
|
||||
|
@ -10,20 +9,48 @@ export default async function handler(req, res) {
|
|||
const supabase = createClient({ req, res });
|
||||
const { nombre, horas, descripcion, competencias } = req.body;
|
||||
|
||||
if (!nombre || !horas || !descripcion || !competencias) {
|
||||
if (!nombre || !horas || !descripcion || !Array.isArray(competencias)) {
|
||||
return res.status(400).json({ error: "Faltan datos del curso" });
|
||||
}
|
||||
|
||||
const { data, error } = await supabase
|
||||
// 1. Insertar el curso
|
||||
const { data: cursoInsertado, error: errorCurso } = await supabase
|
||||
.from("curso")
|
||||
.insert([{ nombre, horas, descripcion, competencias }]);
|
||||
.insert([{ nombre, horas, descripcion }])
|
||||
.select("id")
|
||||
.single();
|
||||
|
||||
if (error) {
|
||||
return res.status(500).json({ error: "Error al insertar en Supabase", detalles: error.message });
|
||||
if (errorCurso) {
|
||||
return res.status(500).json({ error: "Error al insertar el curso", detalles: errorCurso.message });
|
||||
}
|
||||
|
||||
return res.status(200).json({ mensaje: "Curso registrado", data });
|
||||
const cursoId = cursoInsertado.id;
|
||||
|
||||
// 2. Insertar competencias y asociar en la tabla pivote
|
||||
for (const descripcionComp of competencias) {
|
||||
// Insertar competencia (sin validación, siempre se inserta)
|
||||
const { data: competenciaInsertada, error: errorComp } = await supabase
|
||||
.from("competencia")
|
||||
.insert([{ descripcion: descripcionComp }])
|
||||
.select("id")
|
||||
.single();
|
||||
|
||||
if (errorComp) {
|
||||
return res.status(500).json({ error: "Error al insertar competencia", detalles: errorComp.message });
|
||||
}
|
||||
|
||||
// Insertar en la tabla pivote
|
||||
const competenciaId = competenciaInsertada.id;
|
||||
const { error: errorPivote } = await supabase
|
||||
.from("curso_competencia")
|
||||
.insert([{ curso_id: cursoId, competencia_id: competenciaId }]);
|
||||
if (errorPivote) {
|
||||
return res.status(500).json({ error: "Error al asociar competencia", detalles: errorPivote.message });
|
||||
}
|
||||
}
|
||||
|
||||
return res.status(200).json({ mensaje: "Curso registrado correctamente" });
|
||||
} catch (err) {
|
||||
return res.status(500).json({ error: "Error interno del servidor", detalles: err.message });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,8 +29,8 @@ export default function cursosArchivo() {
|
|||
horas: curso.horas,
|
||||
descripcion: curso.descripcion,
|
||||
competencias: curso.competencias
|
||||
? curso.competencias.split(",").map(c => c.trim())
|
||||
: [],
|
||||
? curso.competencias.split(",").map(c => c.trim())
|
||||
: [],
|
||||
}),
|
||||
});
|
||||
|
||||
|
|
|
@ -143,10 +143,38 @@ export default function CursosVista() {
|
|||
};
|
||||
|
||||
const eliminarCurso = async () => {
|
||||
// 0. Verifica si hay alumnos inscritos a este curso
|
||||
const { data: alumnosInscritos, error: errorAlumnos } = await supabaseClient
|
||||
.from("alumno")
|
||||
.select("id")
|
||||
.eq("curso_id", cursoAEliminar);
|
||||
|
||||
if (errorAlumnos) {
|
||||
setModalMensaje("Error al verificar alumnos inscritos.");
|
||||
setConfirmarEliminar(false);
|
||||
setMostrarModal(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (alumnosInscritos && alumnosInscritos.length > 0) {
|
||||
setModalMensaje("No se puede eliminar el curso porque hay alumnos inscritos a este curso.");
|
||||
setConfirmarEliminar(false);
|
||||
setMostrarModal(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. Elimina relaciones en la tabla pivote
|
||||
await supabaseClient
|
||||
.from("curso_competencia")
|
||||
.delete()
|
||||
.eq("curso_id", cursoAEliminar);
|
||||
|
||||
// 2. Elimina el curso
|
||||
const { error } = await supabaseClient
|
||||
.from("curso")
|
||||
.delete()
|
||||
.eq("id", cursoAEliminar);
|
||||
|
||||
if (error) {
|
||||
setModalMensaje("Error al eliminar el curso");
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue