Files
chinese-family-tree-2/lib/db-upgrade.ts
T
freedakgmail 626d7dddde 0.0.0.5
2025-11-23 00:49:16 +08:00

72 lines
1.8 KiB
TypeScript

import Dexie from "dexie"
import { db } from "./db"
/**
* 检查数据库版本并升级
*/
export async function checkAndUpgradeDatabase(): Promise<boolean> {
try {
// 检查 activityLogs 表是否存在
const tables = db.tables.map(t => t.name)
if (!tables.includes("activityLogs")) {
console.log("检测到需要升级数据库...")
// 关闭当前连接
db.close()
// 删除旧数据库(注意:这会清除所有数据)
// 在生产环境中,应该做数据迁移而不是删除
await Dexie.delete("FamilyTreeDB")
// 重新打开数据库(会自动创建最新版本)
await db.open()
console.log("数据库升级完成")
return true
}
return false
} catch (error) {
console.error("数据库升级失败:", error)
return false
}
}
/**
* 手动升级数据库(保留数据)
*/
export async function upgradeDatabase(): Promise<void> {
try {
// 1. 备份现有数据
const members = await db.members.toArray()
const settings = await db.settings.toArray()
const images = await db.images.toArray()
console.log("备份数据:", { members: members.length, settings: settings.length, images: images.length })
// 2. 关闭并删除数据库
db.close()
await Dexie.delete("FamilyTreeDB")
// 3. 重新打开(会创建新版本)
await db.open()
// 4. 恢复数据
if (members.length > 0) {
await db.members.bulkAdd(members)
}
if (settings.length > 0) {
await db.settings.bulkAdd(settings)
}
if (images.length > 0) {
await db.images.bulkAdd(images)
}
console.log("数据库升级完成,数据已恢复")
} catch (error) {
console.error("数据库升级失败:", error)
throw error
}
}