72 lines
1.8 KiB
TypeScript
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
|
|
}
|
|
}
|