diff --git a/src/data/api/plans.api.ts b/src/data/api/plans.api.ts index 7843460..a05c309 100644 --- a/src/data/api/plans.api.ts +++ b/src/data/api/plans.api.ts @@ -18,7 +18,7 @@ import type { UploadedFile } from '@/components/planes/wizard/PasoDetallesPanel/ const EDGE = { plans_create_manual: 'plans_create_manual', - ai_generate_plan: 'ai_generate_plan', + ai_generate_plan: 'ai-generate-plan', plans_persist_from_ai: 'plans_persist_from_ai', plans_clone_from_existing: 'plans_clone_from_existing', @@ -213,10 +213,10 @@ export type AIGeneratePlanInput = { nivel: string tipoCiclo: TipoCiclo numCiclos: number + estructuraPlanId: UUID } iaConfig: { descripcionEnfoque: string - poblacionObjetivo?: string notasAdicionales?: string archivosReferencia?: Array repositoriosIds?: Array @@ -228,7 +228,27 @@ export type AIGeneratePlanInput = { export async function ai_generate_plan( input: AIGeneratePlanInput, ): Promise { - return invokeEdge(EDGE.ai_generate_plan, input) + console.log('input ai generate', input) + + const edgeFunctionBody = new FormData() + edgeFunctionBody.append('datosBasicos', JSON.stringify(input.datosBasicos)) + edgeFunctionBody.append( + 'iaConfig', + JSON.stringify({ + ...input.iaConfig, + archivosAdjuntos: undefined, // los manejamos aparte + }), + ) + input.iaConfig.archivosAdjuntos.forEach((file, index) => { + edgeFunctionBody.append(`archivosAdjuntos`, file.file) + }) + + return invokeEdge( + EDGE.ai_generate_plan, + edgeFunctionBody, + undefined, + supabaseBrowser(), + ) } export async function plans_persist_from_ai(payload: { diff --git a/src/routes/planes/$planId/_detalle/mapa.tsx b/src/routes/planes/$planId/_detalle/mapa.tsx index 588a666..985604e 100644 --- a/src/routes/planes/$planId/_detalle/mapa.tsx +++ b/src/routes/planes/$planId/_detalle/mapa.tsx @@ -161,12 +161,9 @@ function MapaCurricularPage() { const { planId } = Route.useParams() // Idealmente usa el ID de la ruta // 1. Fetch de Datos - const { data: asignaturasApi, isLoading: loadingAsig } = usePlanAsignaturas( - /* planId*/ '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', - ) - const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas( - /* planId*/ '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', - ) + const { data: asignaturasApi, isLoading: loadingAsig } = + usePlanAsignaturas(planId) + const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas(planId) // 2. Estado Local (Para interactividad) const [materias, setMaterias] = useState>([]) diff --git a/src/routes/planes/$planId/_detalle/materias.tsx b/src/routes/planes/$planId/_detalle/materias.tsx index bb34d47..6c7d5f4 100644 --- a/src/routes/planes/$planId/_detalle/materias.tsx +++ b/src/routes/planes/$planId/_detalle/materias.tsx @@ -71,12 +71,9 @@ function MateriasPage() { const navigate = useNavigate() // 1. Fetch de datos reales - const { data: asignaturasApi, isLoading: loadingAsig } = usePlanAsignaturas( - '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', - ) - const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas( - '0e0aea4d-b8b4-4e75-8279-6224c3ac769f', - ) + const { data: asignaturasApi, isLoading: loadingAsig } = + usePlanAsignaturas(planId) + const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas(planId) // 2. Estados de filtrado const [searchTerm, setSearchTerm] = useState('') @@ -232,7 +229,7 @@ function MateriasPage() { to: '/planes/$planId/asignaturas/$asignaturaId', params: { planId, - asignaturaId: 'asignatura', // 👈 puede ser índice, consecutivo o slug + asignaturaId: materia.id, // 👈 puede ser índice, consecutivo o slug }, state: { realId: materia.id, // 👈 ID largo oculto