Fix: Agregar migración de datos para sesiones antiguas
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m3s
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:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user