SIDAC/diplomas/src/pages/api/curso.js

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 });
}
}