From e69780c3212f2e2ab2926b3f75265c376be5b13d Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sat, 18 Oct 2025 03:00:00 -0600 Subject: [PATCH] =?UTF-8?q?Fix:=20Agregar=20migraci=C3=B3n=20de=20datos=20?= =?UTF-8?q?para=20sesiones=20antiguas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agregar función migrateSesion() que convierte el formato antiguo al nuevo - Formato antiguo: { categoria: string, subcategoria: string } - Formato nuevo: { categorias: string[], subcategorias: string[] } - Migración automática al cargar sesiones desde IndexedDB - Maneja casos donde categorias/subcategorias son null o undefined --- nuxt4/app/composables/useIndexedDB.ts | 67 ++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/nuxt4/app/composables/useIndexedDB.ts b/nuxt4/app/composables/useIndexedDB.ts index 2a3d576..45da487 100644 --- a/nuxt4/app/composables/useIndexedDB.ts +++ b/nuxt4/app/composables/useIndexedDB.ts @@ -74,6 +74,65 @@ async function saveSession(sesion: SesionCatacion): Promise { } } +/** + * Migra una sesión del formato antiguo al nuevo + */ +function migrateSesion(sesion: any): SesionCatacion { + // Migrar cada muestra + const muestrasMigradas = sesion.muestras.map((muestra: any) => { + const muestraMigrada = { ...muestra } + + // Migrar fraganciaAromaNotas + if (muestra.fraganciaAromaNotas) { + const notas = muestra.fraganciaAromaNotas + // Si tiene el formato antiguo (categoria como string) + if ('categoria' in notas && typeof notas.categoria === 'string') { + muestraMigrada.fraganciaAromaNotas = { + categorias: notas.categoria ? [notas.categoria] : [], + subcategorias: notas.subcategoria ? [notas.subcategoria] : [], + notaEspecifica: notas.notaEspecifica, + } + } + // Si ya tiene el formato nuevo pero es null + else if (notas.categorias === null || notas.categorias === undefined) { + muestraMigrada.fraganciaAromaNotas = { + categorias: [], + subcategorias: [], + notaEspecifica: notas.notaEspecifica || null, + } + } + } + + // Migrar saborNotas + if (muestra.saborNotas) { + const notas = muestra.saborNotas + // Si tiene el formato antiguo (categoria como string) + if ('categoria' in notas && typeof notas.categoria === 'string') { + muestraMigrada.saborNotas = { + categorias: notas.categoria ? [notas.categoria] : [], + subcategorias: notas.subcategoria ? [notas.subcategoria] : [], + notaEspecifica: notas.notaEspecifica, + } + } + // Si ya tiene el formato nuevo pero es null + else if (notas.categorias === null || notas.categorias === undefined) { + muestraMigrada.saborNotas = { + categorias: [], + subcategorias: [], + notaEspecifica: notas.notaEspecifica || null, + } + } + } + + return muestraMigrada + }) + + return { + ...sesion, + muestras: muestrasMigradas, + } +} + /** * Carga la sesión activa desde IndexedDB */ @@ -90,7 +149,13 @@ async function loadSession(): Promise { getAllRequest.onsuccess = () => { const sesiones = getAllRequest.result as SesionCatacion[] // Retornar la primera sesión (debería haber solo una) - const sesion = sesiones.length > 0 ? sesiones[0] : null + let sesion = sesiones.length > 0 ? sesiones[0] : null + + // Migrar sesión si es necesario + if (sesion) { + sesion = migrateSesion(sesion) + } + resolve(sesion || null) }