feat: 首次推送到Gitea - 完整项目代码 + 安全加固 + 知识库
This commit is contained in:
@@ -93,6 +93,12 @@ async function main() {
|
||||
console.log(`\n 已发布工具巡检完成: ${checked}个, 网站失效${websiteFails}个, Logo异常${logoFails}个`);
|
||||
|
||||
checked = 0;
|
||||
// 自动发布判定:只要求"网站可达";Logo 仅作提示、不阻断发布
|
||||
// 原因:checkLogo 用 HEAD 探测,很多站点/CDN 不支持 HEAD(返回 405/403),而前端 <img> 用 GET 渲染,
|
||||
// HEAD 失败 ≠ 坏链。原先要求 websiteOk && logoOk 同时成立,导致 292 个待审核工具 0 产出。
|
||||
const skipReasons = { noWebsiteUrl: 0, websiteUnreachable: 0, slugConflict: 0, publishError: 0 };
|
||||
let logoBadHint = 0;
|
||||
|
||||
for (const pt of pendingTools) {
|
||||
try {
|
||||
const websiteOk = pt.websiteUrl ? await checkWebsite(pt.websiteUrl) : false;
|
||||
@@ -103,10 +109,17 @@ async function main() {
|
||||
data: { checkWebsiteOk: websiteOk, checkLogoOk: logoOk, checkDescOk: true, checkCategoryOk: true },
|
||||
});
|
||||
|
||||
if (websiteOk && logoOk) {
|
||||
const slug = pt.slug || pt.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") + "-" + Date.now().toString(36);
|
||||
if (!pt.websiteUrl) {
|
||||
skipReasons.noWebsiteUrl++;
|
||||
} else if (!websiteOk) {
|
||||
skipReasons.websiteUnreachable++;
|
||||
} else {
|
||||
if (!logoOk) logoBadHint++;
|
||||
const slug = pt.slug || pt.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") + "-" + Date.now().toString(36) + Math.random().toString(36).slice(2, 5);
|
||||
const existingSlug = await prisma.tool.findUnique({ where: { slug } });
|
||||
if (!existingSlug) {
|
||||
if (existingSlug) {
|
||||
skipReasons.slugConflict++;
|
||||
} else {
|
||||
await prisma.tool.create({
|
||||
data: {
|
||||
name: pt.name,
|
||||
@@ -121,16 +134,17 @@ async function main() {
|
||||
tags: pt.tags,
|
||||
status: "published",
|
||||
websiteOk: true,
|
||||
logoOk: true,
|
||||
logoOk,
|
||||
},
|
||||
});
|
||||
await prisma.pendingTool.delete({ where: { id: pt.id } });
|
||||
autoPublished++;
|
||||
console.log(` ✅ 自动发布: ${pt.name}`);
|
||||
console.log(` ✅ 自动发布: ${pt.name}${logoOk ? "" : " (Logo 校验未通过,已放行)"}`);
|
||||
}
|
||||
}
|
||||
checked++;
|
||||
} catch (e) {
|
||||
skipReasons.publishError++;
|
||||
errors.push(`PendingTool ${pt.name}: ${e.message}`);
|
||||
}
|
||||
|
||||
@@ -147,16 +161,19 @@ async function main() {
|
||||
websiteFails,
|
||||
logoFails,
|
||||
autoPublished,
|
||||
logoBadHint,
|
||||
skipReasons,
|
||||
duration: `${(duration / 1000).toFixed(1)}s`,
|
||||
};
|
||||
|
||||
console.log(`\n🏁 [Task3] 完成: 巡检${tools.length + pendingTools.length}个, 自动发布${autoPublished}个, 网站失效${websiteFails}个`);
|
||||
console.log(` 待审核未发布原因: 网站不可达${skipReasons.websiteUnreachable} / 无网址${skipReasons.noWebsiteUrl} / slug冲突${skipReasons.slugConflict} / 异常${skipReasons.publishError};其中 Logo 校验未通过${logoBadHint}个已放行`);
|
||||
|
||||
await prisma.taskLog.create({
|
||||
data: {
|
||||
taskKey: "task3-check-tools",
|
||||
taskName: "工具巡检",
|
||||
status: errors.length > 0 ? "completed" : "completed",
|
||||
status: "completed",
|
||||
startedAt: startTime,
|
||||
finishedAt: endTime,
|
||||
duration,
|
||||
|
||||
Reference in New Issue
Block a user