Fix: Agregar migración de datos para sesiones antiguas
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m3s

- 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
This commit is contained in:
2025-10-18 03:00:00 -06:00
parent 48e0d2f7dc
commit e69780c321

View File

@@ -74,6 +74,65 @@ async function saveSession(sesion: SesionCatacion): Promise<void> {
} }
} }
/**
* 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 * Carga la sesión activa desde IndexedDB
*/ */
@@ -90,7 +149,13 @@ async function loadSession(): Promise<SesionCatacion | null> {
getAllRequest.onsuccess = () => { getAllRequest.onsuccess = () => {
const sesiones = getAllRequest.result as SesionCatacion[] const sesiones = getAllRequest.result as SesionCatacion[]
// Retornar la primera sesión (debería haber solo una) // 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) resolve(sesion || null)
} }