-
Notifications
You must be signed in to change notification settings - Fork 4
/
test2.js
110 lines (97 loc) · 3.23 KB
/
test2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const { PrismaClient } = require("@prisma/client");
const crypto = require("crypto");
const prisma = new PrismaClient();
(async () => {
try {
// 获取所有项目
const projects = await prisma.ow_projects.findMany({});
// 遍历项目,计算哈希并更新数据库
for (const project of projects) {
var source = processSource(project.source);
const hash = calculateHash(source);
var devsource = processSource(project.devsource);
const devhash = calculateHash(devsource);
console.log(`Hash for project ${project.id} source: ${hash}`);
console.log(`Hash for project ${project.id} devsource: ${devhash}`);
// 插入或更新 `ow_projects_file` 表
await upsertProjectFile(hash, source);
// 插入或更新 `ow_projects_file` 表
await upsertProjectFile(devhash, devsource);
// 更新 `ow_projects` 表
await updateProjectSource(project.id, hash);
// 更新 `ow_projects` 表
await updateProjectDevsource(project.id, devhash);
console.log(`Project ${project.id} processed successfully.`);
}
console.log("All projects processed.");
} catch (error) {
console.error("Error processing projects:", error);
} finally {
// 关闭数据库连接
await prisma.$disconnect();
}
})();
// 计算 SHA-256 哈希值
function calculateHash(source) {
return crypto.createHash("sha256").update(source).digest("hex");
}
// 插入或更新 `ow_projects_file` 表
async function upsertProjectFile(hash, source) {
try {
await prisma.ow_projects_file.upsert({
where: { sha256: hash },
update: { sha256: hash, source: String(source) },
create: { sha256: hash, source: String(source) },
});
} catch (error) {
console.error(`Error in upserting project file for hash ${hash}:`, error);
}
}
// 更新 `ow_projects` 表中的 `source` 字段
async function updateProjectSource(projectId, hash) {
try {
await prisma.ow_projects.update({
where: { id: projectId },
data: { source: hash },
});
} catch (error) {
console.error(`Error in updating project ${projectId}:`, error);
}
}
// 更新 `ow_projects` 表中的 `devsource` 字段
async function updateProjectDevsource(projectId, hash) {
try {
await prisma.ow_projects.update({
where: { id: projectId },
data: { devsource: hash },
});
} catch (error) {
console.error(`Error in updating project ${projectId}:`, error);
}
}
// 检查是否为哈希值
function isHash(str, length) {
const hexRegex = /^[a-fA-F0-9]+$/;
return str.length === length && hexRegex.test(str);
}
function processSource(source) {
// 判断是否为 JSON 格式
if (isJson(source)) {
console.log("Source is valid JSON, processing as JSON...");
// 对 JSON 字符串进行处理,例如将其转换为字符串
return JSON.stringify(JSON.parse(source));
} else {
console.log("Source is not JSON, processing as a regular string...");
// 直接处理非 JSON 字符串
return String(source);
}
}
// 判断是否为有效 JSON
function isJson(str) {
try {
JSON.parse(str); // 如果能成功解析,说明是合法的 JSON
return true;
} catch (error) {
return false; // 如果解析失败,说明不是 JSON
}
}