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";
|
import { createClient } from "@/utils/supabase";
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
export default async function handler(req, res) {
|
||||||
|
@ -10,20 +9,48 @@ export default async function handler(req, res) {
|
||||||
const supabase = createClient({ req, res });
|
const supabase = createClient({ req, res });
|
||||||
const { nombre, horas, descripcion, competencias } = req.body;
|
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" });
|
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")
|
.from("curso")
|
||||||
.insert([{ nombre, horas, descripcion, competencias }]);
|
.insert([{ nombre, horas, descripcion }])
|
||||||
|
.select("id")
|
||||||
|
.single();
|
||||||
|
|
||||||
if (error) {
|
if (errorCurso) {
|
||||||
return res.status(500).json({ error: "Error al insertar en Supabase", detalles: error.message });
|
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) {
|
} catch (err) {
|
||||||
return res.status(500).json({ error: "Error interno del servidor", detalles: err.message });
|
return res.status(500).json({ error: "Error interno del servidor", detalles: err.message });
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -29,8 +29,8 @@ export default function cursosArchivo() {
|
||||||
horas: curso.horas,
|
horas: curso.horas,
|
||||||
descripcion: curso.descripcion,
|
descripcion: curso.descripcion,
|
||||||
competencias: curso.competencias
|
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 () => {
|
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
|
const { error } = await supabaseClient
|
||||||
.from("curso")
|
.from("curso")
|
||||||
.delete()
|
.delete()
|
||||||
.eq("id", cursoAEliminar);
|
.eq("id", cursoAEliminar);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
setModalMensaje("Error al eliminar el curso");
|
setModalMensaje("Error al eliminar el curso");
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue