feat(test): 添加数据库测试页面和工具 将ckchat相关代码移动到store/module/ckchat子目录,包含数据定义和实现文件 添加数据库测试页面和工具类,支持服务器ID与本地ID映射 移除不再使用的initSafeArea函数
147 lines
3.9 KiB
TypeScript
147 lines
3.9 KiB
TypeScript
/**
|
||
* 数据库版本升级测试脚本
|
||
* 用于验证数据库版本升级逻辑是否正常工作
|
||
*/
|
||
|
||
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);
|
||
});
|
||
}
|