Files
cunkebao_v3/Cunkebao/src/utils/db-test.ts
超级老白兔 13cb684abd refactor(store): 重构ckchat模块为子目录结构
feat(test): 添加数据库测试页面和工具

将ckchat相关代码移动到store/module/ckchat子目录,包含数据定义和实现文件
添加数据库测试页面和工具类,支持服务器ID与本地ID映射
移除不再使用的initSafeArea函数
2025-08-30 11:52:52 +08:00

147 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 数据库版本升级测试脚本
* 用于验证数据库版本升级逻辑是否正常工作
*/
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);
});
}