v0.11.1: 权限体系重构 + AI管线优化 + 内容整理

This commit is contained in:
sgp
2026-05-22 18:36:41 +08:00
parent 7955d11c52
commit b33fe1e8e1
397 changed files with 30940 additions and 161 deletions
+55
View File
@@ -0,0 +1,55 @@
import { PrismaClient } from "@prisma/client";
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
import "dotenv/config";
const base = process.env.DATABASE_URL || "mysql://localhost:3306/zhuiguang_ai?charset=utf8mb4";
const sep = base.includes("?") ? "&" : "?";
const connectionString = `${base}${sep}connection_limit=20&pool_timeout=30`;
const adapter = new PrismaMariaDb(connectionString);
const prisma = new PrismaClient({ adapter });
const NON_AI_PATTERNS = [
"book", "guide", "tutorial", "awesome", "interview",
"notes", "handbook", "cheatsheet", "cheat-sheet", "roadmap",
"everything you need to know",
"StableDiffusionBook",
"Claude-Code-Everything-You-Need-to-Know",
"Snailclimb/JavaGuide",
"pathwaycom/pathway",
"Shubhamsaboo/awesome-llm-apps",
];
async function main() {
console.log("🧹 清理误入库的非AI技能数据\n");
const skills = await prisma.skill.findMany({
select: { id: true, name: true, sourceUrl: true, status: true },
});
let cleaned = 0;
for (const skill of skills) {
const name = skill.name.toLowerCase();
const isNonAI = NON_AI_PATTERNS.some((p) => name.includes(p.toLowerCase()));
if (isNonAI && skill.status === "draft") {
await prisma.skillReview.deleteMany({ where: { skillId: skill.id } });
await prisma.reviewGenerationLog.deleteMany({ where: { skillId: skill.id } });
await prisma.skill.delete({ where: { id: skill.id } });
console.log(`🗑️ 已删除: ${skill.name}`);
cleaned++;
} else if (isNonAI) {
await prisma.skill.update({
where: { id: skill.id },
data: { status: "draft" },
});
console.log(`📝 已标记为draft: ${skill.name}`);
cleaned++;
}
}
if (cleaned === 0) console.log("✅ 没有需要清理的误入数据");
else console.log(`\n✅ 已清理 ${cleaned} 条数据`);
}
main()
.catch((e) => { console.error("💥 清理失败:", e.message); process.exit(1); })
.finally(() => prisma.$disconnect());