56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
import { createClient } from "@/utils/supabase";
|
|
|
|
export default async function handler(req, res) {
|
|
if (req.method !== "POST") {
|
|
return res.status(405).json({ error: "Método no permitido" });
|
|
}
|
|
|
|
try {
|
|
const supabase = createClient({ req, res });
|
|
const { nombre, horas, descripcion, competencias } = req.body;
|
|
|
|
if (!nombre || !horas || !descripcion || !Array.isArray(competencias)) {
|
|
return res.status(400).json({ error: "Faltan datos del curso" });
|
|
}
|
|
|
|
// 1. Insertar el curso
|
|
const { data: cursoInsertado, error: errorCurso } = await supabase
|
|
.from("curso")
|
|
.insert([{ nombre, horas, descripcion }])
|
|
.select("id")
|
|
.single();
|
|
|
|
if (errorCurso) {
|
|
return res.status(500).json({ error: "Error al insertar el curso", detalles: errorCurso.message });
|
|
}
|
|
|
|
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 });
|
|
}
|
|
} |