From c280faef22e1d71b5a910dd190f3085949071d3e Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Thu, 12 Feb 2026 17:26:47 -0600 Subject: [PATCH] feat: add 'vaul' dependency and update database types for conversation management --- bun.lock | 3 + src/data/api/plans.api.ts | 2 +- src/data/api/subjects.api.ts | 2 +- src/types/supabase.ts | 137 +++++++++++++++++++++++++++++++++-- 4 files changed, 136 insertions(+), 8 deletions(-) diff --git a/bun.lock b/bun.lock index e2e0e87..7c9d598 100644 --- a/bun.lock +++ b/bun.lock @@ -43,6 +43,7 @@ "tailwindcss": "^4.0.6", "tw-animate-css": "^1.3.6", "use-debounce": "^10.1.0", + "vaul": "^1.1.2", }, "devDependencies": { "@tanstack/devtools-vite": "^0.3.11", @@ -1388,6 +1389,8 @@ "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], + "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], diff --git a/src/data/api/plans.api.ts b/src/data/api/plans.api.ts index 0d151fe..a6e4ba3 100644 --- a/src/data/api/plans.api.ts +++ b/src/data/api/plans.api.ts @@ -165,7 +165,7 @@ export async function plan_asignaturas_list( const { data, error } = await supabase .from('asignaturas') .select( - 'id,plan_estudio_id,horas_academicas,horas_independientes,estructura_id,codigo,nombre,tipo,creditos,numero_ciclo,linea_plan_id,orden_celda,estado,datos,contenido_tematico,asignatura_hash,conversation_id,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en', + 'id,plan_estudio_id,horas_academicas,horas_independientes,estructura_id,codigo,nombre,tipo,creditos,numero_ciclo,linea_plan_id,orden_celda,estado,datos,contenido_tematico,asignatura_hash,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en', ) .eq('plan_estudio_id', planId) .order('numero_ciclo', { ascending: true, nullsFirst: false }) diff --git a/src/data/api/subjects.api.ts b/src/data/api/subjects.api.ts index 89c5397..9f47447 100644 --- a/src/data/api/subjects.api.ts +++ b/src/data/api/subjects.api.ts @@ -41,7 +41,7 @@ export async function subjects_get(subjectId: UUID): Promise { .from('asignaturas') .select( ` - id,plan_estudio_id,estructura_id,codigo,nombre,tipo,creditos,numero_ciclo,linea_plan_id,orden_celda,estado,datos,contenido_tematico,horas_academicas,horas_independientes,asignatura_hash,conversation_id,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, + id,plan_estudio_id,estructura_id,codigo,nombre,tipo,creditos,numero_ciclo,linea_plan_id,orden_celda,estado,datos,contenido_tematico,horas_academicas,horas_independientes,asignatura_hash,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, planes_estudio( id,carrera_id,estructura_id,nombre,nivel,tipo_ciclo,numero_ciclos,datos,estado_actual_id,activo,tipo_origen,meta_origen,creado_por,actualizado_por,creado_en,actualizado_en, carreras(id,facultad_id,nombre,nombre_corto,clave_sep,activa, facultades(id,nombre,nombre_corto,color,icono)) diff --git a/src/types/supabase.ts b/src/types/supabase.ts index 222236a..771bbc7 100644 --- a/src/types/supabase.ts +++ b/src/types/supabase.ts @@ -88,7 +88,6 @@ export type Database = { asignatura_hash: string | null codigo: string | null contenido_tematico: Json - conversation_id: string | null creado_en: string creado_por: string | null creditos: number @@ -113,7 +112,6 @@ export type Database = { asignatura_hash?: string | null codigo?: string | null contenido_tematico?: Json - conversation_id?: string | null creado_en?: string creado_por?: string | null creditos: number @@ -138,7 +136,6 @@ export type Database = { asignatura_hash?: string | null codigo?: string | null contenido_tematico?: Json - conversation_id?: string | null creado_en?: string creado_por?: string | null creditos?: number @@ -392,6 +389,135 @@ export type Database = { }, ] } + conversaciones_asignatura: { + Row: { + archivado_en: string | null + archivado_por: string | null + asignatura_id: string + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database['public']['Enums']['estado_conversacion'] + id: string + intento_archivado: number + openai_conversation_id: string + } + Insert: { + archivado_en?: string | null + archivado_por?: string | null + asignatura_id: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database['public']['Enums']['estado_conversacion'] + id?: string + intento_archivado?: number + openai_conversation_id: string + } + Update: { + archivado_en?: string | null + archivado_por?: string | null + asignatura_id?: string + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + 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'] + isOneToOne: false + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] + }, + { + foreignKeyName: 'conversaciones_asignatura_asignatura_id_fkey' + columns: ['asignatura_id'] + isOneToOne: false + referencedRelation: 'asignaturas' + referencedColumns: ['id'] + }, + { + foreignKeyName: 'conversaciones_asignatura_creado_por_fkey' + columns: ['creado_por'] + isOneToOne: false + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] + }, + ] + } + conversaciones_plan: { + Row: { + archivado_en: string | null + archivado_por: string | null + conversacion_json: Json + creado_en: string + creado_por: string | null + estado: Database['public']['Enums']['estado_conversacion'] + id: string + intento_archivado: number + openai_conversation_id: string + plan_estudio_id: string + } + Insert: { + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database['public']['Enums']['estado_conversacion'] + id?: string + intento_archivado?: number + openai_conversation_id: string + plan_estudio_id: string + } + Update: { + archivado_en?: string | null + archivado_por?: string | null + conversacion_json?: Json + creado_en?: string + creado_por?: string | null + estado?: Database['public']['Enums']['estado_conversacion'] + id?: string + intento_archivado?: number + openai_conversation_id?: string + plan_estudio_id?: string + } + Relationships: [ + { + foreignKeyName: 'conversaciones_plan_archivado_por_fkey' + columns: ['archivado_por'] + isOneToOne: false + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] + }, + { + foreignKeyName: 'conversaciones_plan_creado_por_fkey' + columns: ['creado_por'] + isOneToOne: false + referencedRelation: 'usuarios_app' + referencedColumns: ['id'] + }, + { + foreignKeyName: 'conversaciones_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] + isOneToOne: false + referencedRelation: 'planes_estudio' + referencedColumns: ['id'] + }, + { + foreignKeyName: 'conversaciones_plan_plan_estudio_id_fkey' + columns: ['plan_estudio_id'] + isOneToOne: false + referencedRelation: 'plantilla_plan' + referencedColumns: ['plan_estudio_id'] + }, + ] + } estados_plan: { Row: { clave: string @@ -675,7 +801,6 @@ export type Database = { actualizado_en: string actualizado_por: string | null carrera_id: string - conversation_id: string | null creado_en: string creado_por: string | null datos: Json @@ -696,7 +821,6 @@ export type Database = { actualizado_en?: string actualizado_por?: string | null carrera_id: string - conversation_id?: string | null creado_en?: string creado_por?: string | null datos?: Json @@ -717,7 +841,6 @@ export type Database = { actualizado_en?: string actualizado_por?: string | null carrera_id?: string - conversation_id?: string | null creado_en?: string creado_por?: string | null datos?: Json @@ -1088,6 +1211,7 @@ export type Database = { } Enums: { estado_asignatura: 'borrador' | 'revisada' | 'aprobada' | 'generando' + estado_conversacion: 'ACTIVA' | 'ARCHIVANDO' | 'ARCHIVADA' | 'ERROR' estado_tarea_revision: 'PENDIENTE' | 'COMPLETADA' | 'OMITIDA' fuente_cambio: 'HUMANO' | 'IA' nivel_plan_estudio: @@ -1261,6 +1385,7 @@ 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'], nivel_plan_estudio: [