Se resuelve conflicto en plnas.api.ts

This commit is contained in:
2026-01-21 14:16:38 -06:00
parent 45952cbdc8
commit 0fddcfdc65
3 changed files with 30 additions and 16 deletions

View File

@@ -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<UUID>
repositoriosIds?: Array<UUID>
@@ -228,7 +228,27 @@ export type AIGeneratePlanInput = {
export async function ai_generate_plan(
input: AIGeneratePlanInput,
): Promise<any> {
return invokeEdge<any>(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<any>(
EDGE.ai_generate_plan,
edgeFunctionBody,
undefined,
supabaseBrowser(),
)
}
export async function plans_persist_from_ai(payload: {

View File

@@ -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<Array<Materia>>([])

View File

@@ -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