diff --git a/src/components/planes/wizard/WizardControls.tsx b/src/components/planes/wizard/WizardControls.tsx index 29e74bc..9bd95d9 100644 --- a/src/components/planes/wizard/WizardControls.tsx +++ b/src/components/planes/wizard/WizardControls.tsx @@ -1,6 +1,7 @@ +import { useQuery } from '@tanstack/react-query' import { useNavigate } from '@tanstack/react-router' import { Loader2 } from 'lucide-react' -import { useState } from 'react' +import { useEffect, useRef, useState } from 'react' import type { AIGeneratePlanInput } from '@/data' import type { NivelPlanEstudio, TipoCiclo } from '@/data/types/domain' @@ -8,8 +9,13 @@ import type { NewPlanWizardState } from '@/features/planes/nuevo/types' // import type { Database } from '@/types/supabase' import { Button } from '@/components/ui/button' -// import { supabaseBrowser } from '@/data' -import { useCreatePlanManual, useGeneratePlanAI } from '@/data/hooks/usePlans' +import { plans_get_maybe } from '@/data/api/plans.api' +import { + useCreatePlanManual, + useDeletePlanEstudio, + useGeneratePlanAI, +} from '@/data/hooks/usePlans' +import { qk } from '@/data/query/keys' export function WizardControls({ errorMessage, @@ -35,10 +41,88 @@ export function WizardControls({ const navigate = useNavigate() const generatePlanAI = useGeneratePlanAI() const createPlanManual = useCreatePlanManual() + const deletePlan = useDeletePlanEstudio() const [isSpinningIA, setIsSpinningIA] = useState(false) + const [pollPlanId, setPollPlanId] = useState(null) + const cancelledRef = useRef(false) // const supabaseClient = supabaseBrowser() // const persistPlanFromAI = usePersistPlanFromAI() + useEffect(() => { + cancelledRef.current = false + return () => { + cancelledRef.current = true + } + }, []) + + const planQuery = useQuery({ + queryKey: pollPlanId + ? qk.planMaybe(pollPlanId) + : ['planes', 'detail-maybe', null], + queryFn: () => plans_get_maybe(pollPlanId as string), + enabled: Boolean(pollPlanId), + refetchInterval: pollPlanId ? 3000 : false, + refetchIntervalInBackground: true, + staleTime: 0, + }) + + useEffect(() => { + if (!pollPlanId) return + if (cancelledRef.current) return + + // Si aún no existe en BDD, seguimos esperando. + const plan = planQuery.data + if (!plan) return + + const clave = String(plan.estados_plan?.clave ?? '').toUpperCase() + + if (clave.startsWith('GENERANDO')) return + + if (clave.startsWith('BORRADOR')) { + setPollPlanId(null) + setIsSpinningIA(false) + setWizard((w) => ({ ...w, isLoading: false })) + navigate({ + to: `/planes/${plan.id}`, + state: { showConfetti: true }, + }) + return + } + + if (clave.startsWith('FALLID')) { + // Detenemos el polling primero para evitar loops. + setPollPlanId(null) + setIsSpinningIA(false) + + deletePlan + .mutateAsync(plan.id) + .catch(() => { + // Si falla el borrado, igual mostramos el error. + }) + .finally(() => { + setWizard((w) => ({ + ...w, + isLoading: false, + errorMessage: 'La generación del plan falló', + })) + }) + } + }, [pollPlanId, planQuery.data, navigate, setWizard, deletePlan]) + + useEffect(() => { + if (!pollPlanId) return + if (!planQuery.isError) return + setPollPlanId(null) + setIsSpinningIA(false) + setWizard((w) => ({ + ...w, + isLoading: false, + errorMessage: + (planQuery.error as any)?.message ?? + 'Error consultando el estado del plan', + })) + }, [pollPlanId, planQuery.isError, planQuery.error, setWizard]) + const handleCreate = async () => { // Start loading setWizard( @@ -82,14 +166,16 @@ export function WizardControls({ console.log(`${new Date().toISOString()} - Enviando a generar plan IA`) setIsSpinningIA(true) - const plan = await generatePlanAI.mutateAsync(aiInput as any) - setIsSpinningIA(false) - console.log(`${new Date().toISOString()} - Plan IA generado`, plan) + const resp: any = await generatePlanAI.mutateAsync(aiInput as any) + const planId = resp?.plan?.id ?? resp?.id + console.log(`${new Date().toISOString()} - Plan IA generado`, resp) - navigate({ - to: `/planes/${plan.id}`, - state: { showConfetti: true }, - }) + if (!planId) { + throw new Error('No se pudo obtener el id del plan generado por IA') + } + + // Inicia polling con React Query; el efecto navega o marca error. + setPollPlanId(String(planId)) return } @@ -114,14 +200,18 @@ export function WizardControls({ } } catch (err: any) { setIsSpinningIA(false) + setPollPlanId(null) setWizard((w) => ({ ...w, isLoading: false, errorMessage: err?.message ?? 'Error generando el plan', })) } finally { - setIsSpinningIA(false) - setWizard((w) => ({ ...w, isLoading: false })) + // Si entramos en polling, el loading se corta desde el efecto terminal. + if (!pollPlanId) { + setIsSpinningIA(false) + setWizard((w) => ({ ...w, isLoading: false })) + } } } diff --git a/src/data/api/plans.api.ts b/src/data/api/plans.api.ts index a6e4ba3..ee59d2b 100644 --- a/src/data/api/plans.api.ts +++ b/src/data/api/plans.api.ts @@ -144,6 +144,48 @@ export async function plans_get(planId: UUID): Promise { return requireData(data, 'Plan no encontrado.') } +/** + * Variante de `plans_get` que NO lanza si no existe (devuelve null). + * Útil para flujos de polling donde el plan puede tardar en aparecer. + */ +export async function plans_get_maybe( + planId: UUID, +): Promise { + const supabase = supabaseBrowser() + + const { data, error } = await supabase + .from('planes_estudio') + .select( + ` + *, + carreras (*, facultades(*)), + estructuras_plan (*), + estados_plan (*) + `, + ) + .eq('id', planId) + .maybeSingle() + + throwIfError(error) + return (data ?? null) as unknown as PlanEstudio | null +} + +export async function plans_delete(planId: UUID): Promise<{ id: UUID }> { + const supabase = supabaseBrowser() + + const { data, error } = await supabase + .from('planes_estudio') + .delete() + .eq('id', planId) + .select('id') + .maybeSingle() + + throwIfError(error) + + // Si por alguna razón no retorna fila (RLS / triggers), devolvemos el id solicitado. + return { id: ((data as any)?.id ?? planId) as UUID } +} + export async function plan_lineas_list( planId: UUID, ): Promise> { diff --git a/src/data/hooks/usePlans.ts b/src/data/hooks/usePlans.ts index 42f221a..b578a02 100644 --- a/src/data/hooks/usePlans.ts +++ b/src/data/hooks/usePlans.ts @@ -12,6 +12,7 @@ import { plan_lineas_list, plans_clone_from_existing, plans_create_manual, + plans_delete, plans_generate_document, plans_get, plans_get_document, @@ -263,6 +264,23 @@ export function useTransitionPlanEstado() { }) } +export function useDeletePlanEstudio() { + const qc = useQueryClient() + + return useMutation({ + mutationFn: (planId: UUID) => plans_delete(planId), + onSuccess: (_ok, planId) => { + qc.invalidateQueries({ queryKey: ['planes', 'list'] }) + qc.removeQueries({ queryKey: qk.plan(planId) }) + qc.removeQueries({ queryKey: qk.planMaybe(planId) }) + qc.removeQueries({ queryKey: qk.planAsignaturas(planId) }) + qc.removeQueries({ queryKey: qk.planLineas(planId) }) + qc.removeQueries({ queryKey: qk.planHistorial(planId) }) + qc.removeQueries({ queryKey: qk.planDocumento(planId) }) + }, + }) +} + export function useGeneratePlanDocumento() { const qc = useQueryClient() diff --git a/src/data/query/keys.ts b/src/data/query/keys.ts index 1ac5890..4e02e9c 100644 --- a/src/data/query/keys.ts +++ b/src/data/query/keys.ts @@ -13,6 +13,7 @@ export const qk = { planesList: (filters: unknown) => ['planes', 'list', filters] as const, plan: (planId: string) => ['planes', 'detail', planId] as const, + planMaybe: (planId: string) => ['planes', 'detail-maybe', planId] as const, planLineas: (planId: string) => ['planes', planId, 'lineas'] as const, planAsignaturas: (planId: string) => ['planes', planId, 'asignaturas'] as const, diff --git a/src/types/supabase.ts b/src/types/supabase.ts index 3e1d507..10ec61f 100644 --- a/src/types/supabase.ts +++ b/src/types/supabase.ts @@ -4,7 +4,7 @@ | boolean | null | { [key: string]: Json | undefined } - | Json[] + | Array export type Database = { graphql_public: { @@ -73,11 +73,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "archivos_subido_por_fkey" - columns: ["subido_por"] + foreignKeyName: 'archivos_subido_por_fkey' + columns: ['subido_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -92,7 +92,7 @@ export type Database = { creado_por: string | null creditos: number datos: Json - estado: Database["public"]["Enums"]["estado_asignatura"] + estado: Database['public']['Enums']['estado_asignatura'] estructura_id: string | null horas_academicas: number | null horas_independientes: number | null @@ -103,8 +103,8 @@ export type Database = { numero_ciclo: number | null orden_celda: number | null plan_estudio_id: string - tipo: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + tipo: Database['public']['Enums']['tipo_asignatura'] + tipo_origen: Database['public']['Enums']['tipo_origen'] | null } Insert: { actualizado_en?: string @@ -116,7 +116,7 @@ export type Database = { creado_por?: string | null creditos: number datos?: Json - estado?: Database["public"]["Enums"]["estado_asignatura"] + estado?: Database['public']['Enums']['estado_asignatura'] estructura_id?: string | null horas_academicas?: number | null horas_independientes?: number | null @@ -127,8 +127,8 @@ export type Database = { numero_ciclo?: number | null orden_celda?: number | null plan_estudio_id: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + tipo?: Database['public']['Enums']['tipo_asignatura'] + tipo_origen?: Database['public']['Enums']['tipo_origen'] | null } Update: { actualizado_en?: string @@ -140,7 +140,7 @@ export type Database = { creado_por?: string | null creditos?: number datos?: Json - estado?: Database["public"]["Enums"]["estado_asignatura"] + estado?: Database['public']['Enums']['estado_asignatura'] estructura_id?: string | null horas_academicas?: number | null horas_independientes?: number | null @@ -151,51 +151,51 @@ export type Database = { numero_ciclo?: number | null orden_celda?: number | null plan_estudio_id?: string - tipo?: Database["public"]["Enums"]["tipo_asignatura"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + tipo?: Database['public']['Enums']['tipo_asignatura'] + tipo_origen?: Database['public']['Enums']['tipo_origen'] | null } Relationships: [ { - foreignKeyName: "asignaturas_actualizado_por_fkey" - columns: ["actualizado_por"] + foreignKeyName: 'asignaturas_actualizado_por_fkey' + columns: ['actualizado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "asignaturas_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'asignaturas_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "asignaturas_estructura_id_fkey" - columns: ["estructura_id"] + foreignKeyName: 'asignaturas_estructura_id_fkey' + columns: ['estructura_id'] isOneToOne: false - referencedRelation: "estructuras_asignatura" - referencedColumns: ["id"] + referencedRelation: 'estructuras_asignatura' + referencedColumns: ['id'] }, { - foreignKeyName: "asignaturas_linea_plan_fk_compuesta" - columns: ["linea_plan_id", "plan_estudio_id"] + foreignKeyName: 'asignaturas_linea_plan_fk_compuesta' + columns: ['linea_plan_id', 'plan_estudio_id'] isOneToOne: false - referencedRelation: "lineas_plan" - referencedColumns: ["id", "plan_estudio_id"] + referencedRelation: 'lineas_plan' + referencedColumns: ['id', 'plan_estudio_id'] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'asignaturas_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] }, { - foreignKeyName: "asignaturas_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'asignaturas_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] }, ] } @@ -208,8 +208,8 @@ export type Database = { creado_en: string creado_por: string | null id: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + tipo: Database['public']['Enums']['tipo_bibliografia'] + tipo_fuente: Database['public']['Enums']['tipo_fuente_bibliografia'] } Insert: { actualizado_en?: string @@ -219,8 +219,8 @@ export type Database = { creado_en?: string creado_por?: string | null id?: string - tipo: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + tipo: Database['public']['Enums']['tipo_bibliografia'] + tipo_fuente?: Database['public']['Enums']['tipo_fuente_bibliografia'] } Update: { actualizado_en?: string @@ -230,23 +230,23 @@ export type Database = { creado_en?: string creado_por?: string | null id?: string - tipo?: Database["public"]["Enums"]["tipo_bibliografia"] - tipo_fuente?: Database["public"]["Enums"]["tipo_fuente_bibliografia"] + tipo?: Database['public']['Enums']['tipo_bibliografia'] + tipo_fuente?: Database['public']['Enums']['tipo_fuente_bibliografia'] } Relationships: [ { - foreignKeyName: "bibliografia_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] + foreignKeyName: 'bibliografia_asignatura_asignatura_id_fkey' + columns: ['asignatura_id'] isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + referencedRelation: 'asignaturas' + referencedColumns: ['id'] }, { - foreignKeyName: "bibliografia_asignatura_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'bibliografia_asignatura_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -256,10 +256,10 @@ export type Database = { cambiado_en: string cambiado_por: string | null campo: string | null - fuente: Database["public"]["Enums"]["fuente_cambio"] | null + fuente: Database['public']['Enums']['fuente_cambio'] | null id: string interaccion_ia_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] + tipo: Database['public']['Enums']['tipo_cambio'] valor_anterior: Json | null valor_nuevo: Json | null } @@ -268,10 +268,10 @@ export type Database = { cambiado_en?: string cambiado_por?: string | null campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + fuente?: Database['public']['Enums']['fuente_cambio'] | null id?: string interaccion_ia_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] + tipo: Database['public']['Enums']['tipo_cambio'] valor_anterior?: Json | null valor_nuevo?: Json | null } @@ -280,27 +280,27 @@ export type Database = { cambiado_en?: string cambiado_por?: string | null campo?: string | null - fuente?: Database["public"]["Enums"]["fuente_cambio"] | null + fuente?: Database['public']['Enums']['fuente_cambio'] | null id?: string interaccion_ia_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] + tipo?: Database['public']['Enums']['tipo_cambio'] valor_anterior?: Json | null valor_nuevo?: Json | null } Relationships: [ { - foreignKeyName: "cambios_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] + foreignKeyName: 'cambios_asignatura_asignatura_id_fkey' + columns: ['asignatura_id'] isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + referencedRelation: 'asignaturas' + referencedColumns: ['id'] }, { - foreignKeyName: "cambios_asignatura_cambiado_por_fkey" - columns: ["cambiado_por"] + foreignKeyName: 'cambios_asignatura_cambiado_por_fkey' + columns: ['cambiado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -312,7 +312,7 @@ export type Database = { id: string plan_estudio_id: string response_id: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] + tipo: Database['public']['Enums']['tipo_cambio'] valor_anterior: Json | null valor_nuevo: Json | null } @@ -323,7 +323,7 @@ export type Database = { id?: string plan_estudio_id: string response_id?: string | null - tipo: Database["public"]["Enums"]["tipo_cambio"] + tipo: Database['public']['Enums']['tipo_cambio'] valor_anterior?: Json | null valor_nuevo?: Json | null } @@ -334,17 +334,17 @@ export type Database = { id?: string plan_estudio_id?: string response_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_cambio"] + tipo?: Database['public']['Enums']['tipo_cambio'] valor_anterior?: Json | null valor_nuevo?: Json | null } Relationships: [ { - foreignKeyName: "cambios_plan_cambiado_por_fkey" - columns: ["cambiado_por"] + foreignKeyName: 'cambios_plan_cambiado_por_fkey' + columns: ['cambiado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -381,11 +381,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "carreras_facultad_id_fkey" - columns: ["facultad_id"] + foreignKeyName: 'carreras_facultad_id_fkey' + columns: ['facultad_id'] isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + referencedRelation: 'facultades' + referencedColumns: ['id'] }, ] } @@ -397,7 +397,7 @@ export type Database = { conversacion_json: Json creado_en: string creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] + estado: Database['public']['Enums']['estado_conversacion'] id: string intento_archivado: number openai_conversation_id: string @@ -409,7 +409,7 @@ export type Database = { conversacion_json?: Json creado_en?: string creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] + estado?: Database['public']['Enums']['estado_conversacion'] id?: string intento_archivado?: number openai_conversation_id: string @@ -421,32 +421,32 @@ export type Database = { conversacion_json?: Json creado_en?: string creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] + estado?: Database['public']['Enums']['estado_conversacion'] id?: string intento_archivado?: number openai_conversation_id?: string } Relationships: [ { - foreignKeyName: "conversaciones_asignatura_archivado_por_fkey" - columns: ["archivado_por"] + foreignKeyName: 'conversaciones_asignatura_archivado_por_fkey' + columns: ['archivado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "conversaciones_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] + foreignKeyName: 'conversaciones_asignatura_asignatura_id_fkey' + columns: ['asignatura_id'] isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + referencedRelation: 'asignaturas' + referencedColumns: ['id'] }, { - foreignKeyName: "conversaciones_asignatura_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'conversaciones_asignatura_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -457,7 +457,7 @@ export type Database = { conversacion_json: Json creado_en: string creado_por: string | null - estado: Database["public"]["Enums"]["estado_conversacion"] + estado: Database['public']['Enums']['estado_conversacion'] id: string intento_archivado: number nombre: string | null @@ -470,7 +470,7 @@ export type Database = { conversacion_json?: Json creado_en?: string creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] + estado?: Database['public']['Enums']['estado_conversacion'] id?: string intento_archivado?: number nombre?: string | null @@ -483,7 +483,7 @@ export type Database = { conversacion_json?: Json creado_en?: string creado_por?: string | null - estado?: Database["public"]["Enums"]["estado_conversacion"] + estado?: Database['public']['Enums']['estado_conversacion'] id?: string intento_archivado?: number nombre?: string | null @@ -492,32 +492,32 @@ export type Database = { } Relationships: [ { - foreignKeyName: "conversaciones_plan_archivado_por_fkey" - columns: ["archivado_por"] + foreignKeyName: 'conversaciones_plan_archivado_por_fkey' + columns: ['archivado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "conversaciones_plan_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'conversaciones_plan_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'conversaciones_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] }, { - foreignKeyName: "conversaciones_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'conversaciones_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] }, ] } @@ -580,7 +580,7 @@ export type Database = { id: string nombre: string template_id: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + tipo: Database['public']['Enums']['tipo_estructura_plan'] } Insert: { actualizado_en?: string @@ -589,7 +589,7 @@ export type Database = { id?: string nombre: string template_id?: string | null - tipo: Database["public"]["Enums"]["tipo_estructura_plan"] + tipo: Database['public']['Enums']['tipo_estructura_plan'] } Update: { actualizado_en?: string @@ -598,7 +598,7 @@ export type Database = { id?: string nombre?: string template_id?: string | null - tipo?: Database["public"]["Enums"]["tipo_estructura_plan"] + tipo?: Database['public']['Enums']['tipo_estructura_plan'] } Relationships: [] } @@ -647,7 +647,7 @@ export type Database = { respuesta: Json rutas_storage: Json temperatura: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + tipo: Database['public']['Enums']['tipo_interaccion_ia'] usuario_id: string | null } Insert: { @@ -664,7 +664,7 @@ export type Database = { respuesta?: Json rutas_storage?: Json temperatura?: number | null - tipo: Database["public"]["Enums"]["tipo_interaccion_ia"] + tipo: Database['public']['Enums']['tipo_interaccion_ia'] usuario_id?: string | null } Update: { @@ -681,37 +681,37 @@ export type Database = { respuesta?: Json rutas_storage?: Json temperatura?: number | null - tipo?: Database["public"]["Enums"]["tipo_interaccion_ia"] + tipo?: Database['public']['Enums']['tipo_interaccion_ia'] usuario_id?: string | null } Relationships: [ { - foreignKeyName: "interacciones_ia_asignatura_id_fkey" - columns: ["asignatura_id"] + foreignKeyName: 'interacciones_ia_asignatura_id_fkey' + columns: ['asignatura_id'] isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + referencedRelation: 'asignaturas' + referencedColumns: ['id'] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'interacciones_ia_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] }, { - foreignKeyName: "interacciones_ia_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'interacciones_ia_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] }, { - foreignKeyName: "interacciones_ia_usuario_id_fkey" - columns: ["usuario_id"] + foreignKeyName: 'interacciones_ia_usuario_id_fkey' + columns: ['usuario_id'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -745,18 +745,18 @@ export type Database = { } Relationships: [ { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'lineas_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] }, { - foreignKeyName: "lineas_plan_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'lineas_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] }, ] } @@ -767,7 +767,7 @@ export type Database = { leida: boolean leida_en: string | null payload: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] + tipo: Database['public']['Enums']['tipo_notificacion'] usuario_id: string } Insert: { @@ -776,7 +776,7 @@ export type Database = { leida?: boolean leida_en?: string | null payload?: Json - tipo: Database["public"]["Enums"]["tipo_notificacion"] + tipo: Database['public']['Enums']['tipo_notificacion'] usuario_id: string } Update: { @@ -785,16 +785,16 @@ export type Database = { leida?: boolean leida_en?: string | null payload?: Json - tipo?: Database["public"]["Enums"]["tipo_notificacion"] + tipo?: Database['public']['Enums']['tipo_notificacion'] usuario_id?: string } Relationships: [ { - foreignKeyName: "notificaciones_usuario_id_fkey" - columns: ["usuario_id"] + foreignKeyName: 'notificaciones_usuario_id_fkey' + columns: ['usuario_id'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -811,13 +811,13 @@ export type Database = { estructura_id: string id: string meta_origen: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nivel: Database['public']['Enums']['nivel_plan_estudio'] nombre: string nombre_search: string | null numero_ciclos: number plan_hash: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen: Database["public"]["Enums"]["tipo_origen"] | null + tipo_ciclo: Database['public']['Enums']['tipo_ciclo'] + tipo_origen: Database['public']['Enums']['tipo_origen'] | null } Insert: { activo?: boolean @@ -831,13 +831,13 @@ export type Database = { estructura_id: string id?: string meta_origen?: Json - nivel: Database["public"]["Enums"]["nivel_plan_estudio"] + nivel: Database['public']['Enums']['nivel_plan_estudio'] nombre: string nombre_search?: string | null numero_ciclos: number plan_hash?: string | null - tipo_ciclo: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + tipo_ciclo: Database['public']['Enums']['tipo_ciclo'] + tipo_origen?: Database['public']['Enums']['tipo_origen'] | null } Update: { activo?: boolean @@ -851,56 +851,56 @@ export type Database = { estructura_id?: string id?: string meta_origen?: Json - nivel?: Database["public"]["Enums"]["nivel_plan_estudio"] + nivel?: Database['public']['Enums']['nivel_plan_estudio'] nombre?: string nombre_search?: string | null numero_ciclos?: number plan_hash?: string | null - tipo_ciclo?: Database["public"]["Enums"]["tipo_ciclo"] - tipo_origen?: Database["public"]["Enums"]["tipo_origen"] | null + tipo_ciclo?: Database['public']['Enums']['tipo_ciclo'] + tipo_origen?: Database['public']['Enums']['tipo_origen'] | null } Relationships: [ { - foreignKeyName: "planes_estudio_actualizado_por_fkey" - columns: ["actualizado_por"] + foreignKeyName: 'planes_estudio_actualizado_por_fkey' + columns: ['actualizado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "planes_estudio_carrera_id_fkey" - columns: ["carrera_id"] + foreignKeyName: 'planes_estudio_carrera_id_fkey' + columns: ['carrera_id'] isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + referencedRelation: 'carreras' + referencedColumns: ['id'] }, { - foreignKeyName: "planes_estudio_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'planes_estudio_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "planes_estudio_estado_actual_id_fkey" - columns: ["estado_actual_id"] + foreignKeyName: 'planes_estudio_estado_actual_id_fkey' + columns: ['estado_actual_id'] isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + referencedRelation: 'estados_plan' + referencedColumns: ['id'] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] + foreignKeyName: 'planes_estudio_estructura_id_fkey' + columns: ['estructura_id'] isOneToOne: false - referencedRelation: "estructuras_plan" - referencedColumns: ["id"] + referencedRelation: 'estructuras_plan' + referencedColumns: ['id'] }, { - foreignKeyName: "planes_estudio_estructura_id_fkey" - columns: ["estructura_id"] + foreignKeyName: 'planes_estudio_estructura_id_fkey' + columns: ['estructura_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["estructura_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['estructura_id'] }, ] } @@ -909,37 +909,37 @@ export type Database = { asignatura_id: string creado_en: string id: string - rol: Database["public"]["Enums"]["rol_responsable_asignatura"] + rol: Database['public']['Enums']['rol_responsable_asignatura'] usuario_id: string } Insert: { asignatura_id: string creado_en?: string id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + rol?: Database['public']['Enums']['rol_responsable_asignatura'] usuario_id: string } Update: { asignatura_id?: string creado_en?: string id?: string - rol?: Database["public"]["Enums"]["rol_responsable_asignatura"] + rol?: Database['public']['Enums']['rol_responsable_asignatura'] usuario_id?: string } Relationships: [ { - foreignKeyName: "responsables_asignatura_asignatura_id_fkey" - columns: ["asignatura_id"] + foreignKeyName: 'responsables_asignatura_asignatura_id_fkey' + columns: ['asignatura_id'] isOneToOne: false - referencedRelation: "asignaturas" - referencedColumns: ["id"] + referencedRelation: 'asignaturas' + referencedColumns: ['id'] }, { - foreignKeyName: "responsables_asignatura_usuario_id_fkey" - columns: ["usuario_id"] + foreignKeyName: 'responsables_asignatura_usuario_id_fkey' + columns: ['usuario_id'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -970,7 +970,7 @@ export type Database = { completado_en: string | null creado_en: string estado_id: string | null - estatus: Database["public"]["Enums"]["estado_tarea_revision"] + estatus: Database['public']['Enums']['estado_tarea_revision'] fecha_limite: string | null id: string plan_estudio_id: string @@ -981,7 +981,7 @@ export type Database = { completado_en?: string | null creado_en?: string estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + estatus?: Database['public']['Enums']['estado_tarea_revision'] fecha_limite?: string | null id?: string plan_estudio_id: string @@ -992,7 +992,7 @@ export type Database = { completado_en?: string | null creado_en?: string estado_id?: string | null - estatus?: Database["public"]["Enums"]["estado_tarea_revision"] + estatus?: Database['public']['Enums']['estado_tarea_revision'] fecha_limite?: string | null id?: string plan_estudio_id?: string @@ -1000,39 +1000,39 @@ export type Database = { } Relationships: [ { - foreignKeyName: "tareas_revision_asignado_a_fkey" - columns: ["asignado_a"] + foreignKeyName: 'tareas_revision_asignado_a_fkey' + columns: ['asignado_a'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, { - foreignKeyName: "tareas_revision_estado_id_fkey" - columns: ["estado_id"] + foreignKeyName: 'tareas_revision_estado_id_fkey' + columns: ['estado_id'] isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + referencedRelation: 'estados_plan' + referencedColumns: ['id'] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'tareas_revision_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "planes_estudio" - referencedColumns: ["id"] + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] }, { - foreignKeyName: "tareas_revision_plan_estudio_id_fkey" - columns: ["plan_estudio_id"] + foreignKeyName: 'tareas_revision_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] isOneToOne: false - referencedRelation: "plantilla_plan" - referencedColumns: ["plan_estudio_id"] + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] }, { - foreignKeyName: "tareas_revision_rol_id_fkey" - columns: ["rol_id"] + foreignKeyName: 'tareas_revision_rol_id_fkey' + columns: ['rol_id'] isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + referencedRelation: 'roles' + referencedColumns: ['id'] }, ] } @@ -1060,25 +1060,25 @@ export type Database = { } Relationships: [ { - foreignKeyName: "transiciones_estado_plan_desde_estado_id_fkey" - columns: ["desde_estado_id"] + foreignKeyName: 'transiciones_estado_plan_desde_estado_id_fkey' + columns: ['desde_estado_id'] isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + referencedRelation: 'estados_plan' + referencedColumns: ['id'] }, { - foreignKeyName: "transiciones_estado_plan_hacia_estado_id_fkey" - columns: ["hacia_estado_id"] + foreignKeyName: 'transiciones_estado_plan_hacia_estado_id_fkey' + columns: ['hacia_estado_id'] isOneToOne: false - referencedRelation: "estados_plan" - referencedColumns: ["id"] + referencedRelation: 'estados_plan' + referencedColumns: ['id'] }, { - foreignKeyName: "transiciones_estado_plan_rol_permitido_id_fkey" - columns: ["rol_permitido_id"] + foreignKeyName: 'transiciones_estado_plan_rol_permitido_id_fkey' + columns: ['rol_permitido_id'] isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + referencedRelation: 'roles' + referencedColumns: ['id'] }, ] } @@ -1136,32 +1136,32 @@ export type Database = { } Relationships: [ { - foreignKeyName: "usuarios_roles_carrera_id_fkey" - columns: ["carrera_id"] + foreignKeyName: 'usuarios_roles_carrera_id_fkey' + columns: ['carrera_id'] isOneToOne: false - referencedRelation: "carreras" - referencedColumns: ["id"] + referencedRelation: 'carreras' + referencedColumns: ['id'] }, { - foreignKeyName: "usuarios_roles_facultad_id_fkey" - columns: ["facultad_id"] + foreignKeyName: 'usuarios_roles_facultad_id_fkey' + columns: ['facultad_id'] isOneToOne: false - referencedRelation: "facultades" - referencedColumns: ["id"] + referencedRelation: 'facultades' + referencedColumns: ['id'] }, { - foreignKeyName: "usuarios_roles_rol_id_fkey" - columns: ["rol_id"] + foreignKeyName: 'usuarios_roles_rol_id_fkey' + columns: ['rol_id'] isOneToOne: false - referencedRelation: "roles" - referencedColumns: ["id"] + referencedRelation: 'roles' + referencedColumns: ['id'] }, { - foreignKeyName: "usuarios_roles_usuario_id_fkey" - columns: ["usuario_id"] + foreignKeyName: 'usuarios_roles_usuario_id_fkey' + columns: ['usuario_id'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -1189,11 +1189,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "vector_stores_creado_por_fkey" - columns: ["creado_por"] + foreignKeyName: 'vector_stores_creado_por_fkey' + columns: ['creado_por'] isOneToOne: false - referencedRelation: "usuarios_app" - referencedColumns: ["id"] + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] }, ] } @@ -1209,54 +1209,59 @@ export type Database = { } } Functions: { - unaccent: { Args: { "": string }; Returns: string } - unaccent_immutable: { Args: { "": string }; Returns: string } + unaccent: { Args: { '': string }; Returns: string } + unaccent_immutable: { Args: { '': string }; Returns: string } } Enums: { - estado_asignatura: "borrador" | "revisada" | "aprobada" | "generando" - estado_conversacion: "ACTIVA" | "ARCHIVANDO" | "ARCHIVADA" | "ERROR" - estado_tarea_revision: "PENDIENTE" | "COMPLETADA" | "OMITIDA" - fuente_cambio: "HUMANO" | "IA" + estado_asignatura: + | 'borrador' + | 'revisada' + | 'aprobada' + | 'generando' + | 'fallida' + estado_conversacion: 'ACTIVA' | 'ARCHIVANDO' | 'ARCHIVADA' | 'ERROR' + estado_tarea_revision: 'PENDIENTE' | 'COMPLETADA' | 'OMITIDA' + fuente_cambio: 'HUMANO' | 'IA' nivel_plan_estudio: - | "Licenciatura" - | "Maestría" - | "Doctorado" - | "Especialidad" - | "Diplomado" - | "Otro" + | 'Licenciatura' + | 'Maestría' + | 'Doctorado' + | 'Especialidad' + | 'Diplomado' + | 'Otro' puesto_tipo: - | "vicerrector" - | "director_facultad" - | "secretario_academico" - | "jefe_carrera" - | "profesor" - | "lci" - rol_responsable_asignatura: "PROFESOR_RESPONSABLE" | "COAUTOR" | "REVISOR" - tipo_asignatura: "OBLIGATORIA" | "OPTATIVA" | "TRONCAL" | "OTRA" - tipo_bibliografia: "BASICA" | "COMPLEMENTARIA" + | 'vicerrector' + | 'director_facultad' + | 'secretario_academico' + | 'jefe_carrera' + | 'profesor' + | 'lci' + rol_responsable_asignatura: 'PROFESOR_RESPONSABLE' | 'COAUTOR' | 'REVISOR' + tipo_asignatura: 'OBLIGATORIA' | 'OPTATIVA' | 'TRONCAL' | 'OTRA' + tipo_bibliografia: 'BASICA' | 'COMPLEMENTARIA' tipo_cambio: - | "ACTUALIZACION_CAMPO" - | "ACTUALIZACION_MAPA" - | "TRANSICION_ESTADO" - | "OTRO" - | "CREACION" - | "ACTUALIZACION" - tipo_ciclo: "Semestre" | "Cuatrimestre" | "Trimestre" | "Otro" - tipo_estructura_plan: "CURRICULAR" | "NO_CURRICULAR" - tipo_fuente_bibliografia: "MANUAL" | "BIBLIOTECA" - tipo_interaccion_ia: "GENERAR" | "MEJORAR_SECCION" | "CHAT" | "OTRA" + | 'ACTUALIZACION_CAMPO' + | 'ACTUALIZACION_MAPA' + | 'TRANSICION_ESTADO' + | 'OTRO' + | 'CREACION' + | 'ACTUALIZACION' + tipo_ciclo: 'Semestre' | 'Cuatrimestre' | 'Trimestre' | 'Otro' + tipo_estructura_plan: 'CURRICULAR' | 'NO_CURRICULAR' + tipo_fuente_bibliografia: 'MANUAL' | 'BIBLIOTECA' + tipo_interaccion_ia: 'GENERAR' | 'MEJORAR_SECCION' | 'CHAT' | 'OTRA' tipo_notificacion: - | "PLAN_ASIGNADO" - | "ESTADO_CAMBIADO" - | "TAREA_ASIGNADA" - | "COMENTARIO" - | "OTRA" + | 'PLAN_ASIGNADO' + | 'ESTADO_CAMBIADO' + | 'TAREA_ASIGNADA' + | 'COMENTARIO' + | 'OTRA' tipo_origen: - | "MANUAL" - | "IA" - | "CLONADO_INTERNO" - | "CLONADO_TRADICIONAL" - | "OTRO" + | 'MANUAL' + | 'IA' + | 'CLONADO_INTERNO' + | 'CLONADO_TRADICIONAL' + | 'OTRO' } CompositeTypes: { [_ in never]: never @@ -1264,33 +1269,33 @@ export type Database = { } } -type DatabaseWithoutInternals = Omit +type DatabaseWithoutInternals = Omit -type DefaultSchema = DatabaseWithoutInternals[Extract] +type DefaultSchema = DatabaseWithoutInternals[Extract] export type Tables< DefaultSchemaTableNameOrOptions extends - | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) + | keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views']) : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views'])[TableName] extends { Row: infer R } ? R : never - : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & - DefaultSchema["Views"]) - ? (DefaultSchema["Tables"] & - DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema['Tables'] & + DefaultSchema['Views']) + ? (DefaultSchema['Tables'] & + DefaultSchema['Views'])[DefaultSchemaTableNameOrOptions] extends { Row: infer R } ? R @@ -1299,23 +1304,23 @@ export type Tables< export type TablesInsert< DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] + | keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { Insert: infer I } ? I : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { Insert: infer I } ? I @@ -1324,23 +1329,23 @@ export type TablesInsert< export type TablesUpdate< DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] + | keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { Update: infer U } ? U : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { Update: infer U } ? U @@ -1349,36 +1354,36 @@ export type TablesUpdate< export type Enums< DefaultSchemaEnumNameOrOptions extends - | keyof DefaultSchema["Enums"] + | keyof DefaultSchema['Enums'] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'] : never = never, > = DefaultSchemaEnumNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] - : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] - ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema['Enums'] + ? DefaultSchema['Enums'][DefaultSchemaEnumNameOrOptions] : never export type CompositeTypes< PublicCompositeTypeNameOrOptions extends - | keyof DefaultSchema["CompositeTypes"] + | keyof DefaultSchema['CompositeTypes'] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'] : never = never, > = PublicCompositeTypeNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] - ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] + ? DefaultSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] : never export const Constants = { @@ -1387,60 +1392,65 @@ export const Constants = { }, public: { Enums: { - estado_asignatura: ["borrador", "revisada", "aprobada", "generando"], - estado_conversacion: ["ACTIVA", "ARCHIVANDO", "ARCHIVADA", "ERROR"], - estado_tarea_revision: ["PENDIENTE", "COMPLETADA", "OMITIDA"], - fuente_cambio: ["HUMANO", "IA"], + estado_asignatura: [ + 'borrador', + 'revisada', + 'aprobada', + 'generando', + 'fallida', + ], + estado_conversacion: ['ACTIVA', 'ARCHIVANDO', 'ARCHIVADA', 'ERROR'], + estado_tarea_revision: ['PENDIENTE', 'COMPLETADA', 'OMITIDA'], + fuente_cambio: ['HUMANO', 'IA'], nivel_plan_estudio: [ - "Licenciatura", - "Maestría", - "Doctorado", - "Especialidad", - "Diplomado", - "Otro", + 'Licenciatura', + 'Maestría', + 'Doctorado', + 'Especialidad', + 'Diplomado', + 'Otro', ], puesto_tipo: [ - "vicerrector", - "director_facultad", - "secretario_academico", - "jefe_carrera", - "profesor", - "lci", + 'vicerrector', + 'director_facultad', + 'secretario_academico', + 'jefe_carrera', + 'profesor', + 'lci', ], rol_responsable_asignatura: [ - "PROFESOR_RESPONSABLE", - "COAUTOR", - "REVISOR", + 'PROFESOR_RESPONSABLE', + 'COAUTOR', + 'REVISOR', ], - tipo_asignatura: ["OBLIGATORIA", "OPTATIVA", "TRONCAL", "OTRA"], - tipo_bibliografia: ["BASICA", "COMPLEMENTARIA"], + tipo_asignatura: ['OBLIGATORIA', 'OPTATIVA', 'TRONCAL', 'OTRA'], + tipo_bibliografia: ['BASICA', 'COMPLEMENTARIA'], tipo_cambio: [ - "ACTUALIZACION_CAMPO", - "ACTUALIZACION_MAPA", - "TRANSICION_ESTADO", - "OTRO", - "CREACION", - "ACTUALIZACION", + 'ACTUALIZACION_CAMPO', + 'ACTUALIZACION_MAPA', + 'TRANSICION_ESTADO', + 'OTRO', + 'CREACION', + 'ACTUALIZACION', ], - tipo_ciclo: ["Semestre", "Cuatrimestre", "Trimestre", "Otro"], - tipo_estructura_plan: ["CURRICULAR", "NO_CURRICULAR"], - tipo_fuente_bibliografia: ["MANUAL", "BIBLIOTECA"], - tipo_interaccion_ia: ["GENERAR", "MEJORAR_SECCION", "CHAT", "OTRA"], + tipo_ciclo: ['Semestre', 'Cuatrimestre', 'Trimestre', 'Otro'], + tipo_estructura_plan: ['CURRICULAR', 'NO_CURRICULAR'], + tipo_fuente_bibliografia: ['MANUAL', 'BIBLIOTECA'], + tipo_interaccion_ia: ['GENERAR', 'MEJORAR_SECCION', 'CHAT', 'OTRA'], tipo_notificacion: [ - "PLAN_ASIGNADO", - "ESTADO_CAMBIADO", - "TAREA_ASIGNADA", - "COMENTARIO", - "OTRA", + 'PLAN_ASIGNADO', + 'ESTADO_CAMBIADO', + 'TAREA_ASIGNADA', + 'COMENTARIO', + 'OTRA', ], tipo_origen: [ - "MANUAL", - "IA", - "CLONADO_INTERNO", - "CLONADO_TRADICIONAL", - "OTRO", + 'MANUAL', + 'IA', + 'CLONADO_INTERNO', + 'CLONADO_TRADICIONAL', + 'OTRO', ], }, }, } as const -