/** * 数据库版本升级测试脚本 * 用于验证数据库版本升级逻辑是否正常工作 */ import { db } from "./db"; // 重置数据库(完全删除并重新创建) export async function resetDatabase() { try { console.log("开始重置数据库..."); // 关闭数据库连接 if (db.isOpen()) { db.close(); } // 删除数据库 await db.delete(); console.log("旧数据库已删除"); // 重新打开数据库(这会创建新的数据库) await db.open(); console.log("数据库重置成功!"); console.log("当前数据库版本:", db.verno); console.log("数据库名称:", db.name); return { success: true, version: db.verno, tables: db.tables.map(table => table.name), message: "数据库重置成功", }; } catch (error) { console.error("数据库重置失败:", error); return { success: false, error: error instanceof Error ? error.message : String(error), message: "数据库重置失败", }; } } // 测试数据库初始化和版本升级 export async function testDatabaseUpgrade() { try { console.log("开始测试数据库初始化..."); // 首先尝试正常打开数据库 try { await db.open(); } catch (upgradeError) { // 如果遇到升级错误,尝试重置数据库 if ( upgradeError.message && upgradeError.message.includes("primary key") ) { console.log("检测到主键冲突,尝试重置数据库..."); const resetResult = await resetDatabase(); if (!resetResult.success) { throw new Error(`数据库重置失败: ${resetResult.error}`); } } else { throw upgradeError; } } console.log("数据库初始化成功!"); console.log("当前数据库版本:", db.verno); console.log("数据库名称:", db.name); // 检查表是否存在 const tables = db.tables.map(table => table.name); console.log("数据库表:", tables); // 测试基本操作 const testData = { tenantId: 1, // 修正为number类型 wechatId: "test-wechat-id", nickname: "测试用户", alias: "测试别名", }; // 测试创建数据 const userId = await db.kfUsers.add({ ...testData, id: 0, // 添加必需的id字段 currentDeviceId: 0, isDeleted: false, deleteTime: "", groupId: 0, memo: "", // 备注信息 wechatVersion: "", labels: [], lastUpdateTime: new Date().toISOString(), // 修复语法错误,使用字符串类型 serverId: "test-server-id-001", // 提供有意义的测试值 // 移除不属于KfUserListData接口的字段 signature: "", bindQQ: "", bindEmail: "", bindMobile: "", bindWeixin: "", bindAlipay: "", bindTaobao: "", bindJd: "", bindDouyin: "", bindKuaishou: "", bindBilibili: "", avatar: "", gender: 0, region: "", createTime: new Date().toISOString(), // 使用字符串类型 }); console.log("创建测试用户成功,ID:", userId); // 测试查询数据 const user = await db.kfUsers.get(userId); console.log("查询测试用户:", user); // 清理测试数据 await db.kfUsers.delete(userId); console.log("清理测试数据完成"); return { success: true, version: db.verno, tables: tables, message: "数据库版本升级测试通过", }; } catch (error) { console.error("数据库测试失败:", error); return { success: false, error: error instanceof Error ? error.message : String(error), message: "数据库版本升级测试失败", }; } } // 如果直接运行此文件,执行测试 if (typeof window === "undefined") { testDatabaseUpgrade().then(result => { console.log("测试结果:", result); }); }