fix: 定时任务修复+管理后台Task7支持 (Task4外键修复, Task7管理员邮箱动态查询, Task5限流防护, Task7加入SCRIPT_MAP)
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
- 使用PrismaMariaDb adapter
|
||||
- 连接池配置(connection_limit=20, pool_timeout=30)
|
||||
- 日志: 开发环境warn/error,生产环境error
|
||||
- **环境变量校验**: DATABASE_URL 未设置时抛出明确错误(移除硬编码默认连接串)
|
||||
|
||||
### auth.ts - 认证配置
|
||||
- NextAuth配置导出
|
||||
@@ -31,22 +32,26 @@
|
||||
|
||||
### validation.ts - 数据验证
|
||||
- Zod验证schemas
|
||||
- 包含: registerSchema, loginSchema, paginationSchema, toolImportSchema, skillImportSchema, newsImportSchema, checkTypeSchema, profileUpdateSchema, favoriteSchema, historySchema, taskRunSchema, roleCreateSchema, categoryCreateSchema, skillCategoryCreateSchema, systemConfigUpdateSchema
|
||||
- 包含: registerSchema, loginSchema, paginationSchema, toolImportSchema(**max(100)**), skillImportSchema(**max(100)**), newsImportSchema(**max(50)**), checkTypeSchema(**max(50)**), profileUpdateSchema, favoriteSchema, historySchema, taskRunSchema, roleCreateSchema, categoryCreateSchema, skillCategoryCreateSchema, systemConfigUpdateSchema
|
||||
- 批量导入数组均有数量上限,防止一次请求导入过多数据
|
||||
|
||||
### deepseek.ts - DeepSeek评测生成
|
||||
- 依赖: openai (兼容OpenAI接口)
|
||||
- 认证: process.env.DEEPSEEK_API_KEY
|
||||
- baseURL: https://api.deepseek.com/v1
|
||||
- 模型: deepseek-v4-pro
|
||||
- 模型: 环境变量 `DEEPSEEK_MODEL`(默认 `deepseek-v4-pro`)
|
||||
- 客户端配置: `timeout: 120000`, `maxRetries: 2`
|
||||
- `generateReview(repoName, description, stars, license, readme)`: 调用DeepSeek生成五维评测
|
||||
- 综合分校验: 自动计算五维均分,偏差>0.3时修正
|
||||
- JSON提取: 兼容markdown代码块包裹的响应
|
||||
|
||||
### github.ts - GitHub数据采集
|
||||
- 依赖: octokit
|
||||
- 认证: process.env.GITHUB_TOKEN (可选,提升限流60→5000次/小时)
|
||||
- `searchHotRepos(query, minStars, maxResults)`: 搜索热门仓库,按Star降序
|
||||
- `getRepoReadme(owner, repo)`: 获取仓库README内容(base64解码)
|
||||
- 认证: process.env.GITHUB_TOKEN (推荐设置,提升限流60→5000次/小时)
|
||||
- Octokit配置: `request.timeout: 30000`
|
||||
- **withRetry**: 指数退避重试(最多3次),403/404/422 不重试直接抛
|
||||
- `searchHotRepos(query, minStars, maxResults)`: 搜索热门仓库,按Star降序(带重试)
|
||||
- `getRepoReadme(owner, repo)`: 获取仓库README内容(base64解码)(带重试+错误日志)
|
||||
- `GitHubRepo` 接口: id, full_name, html_url, description, stargazers_count, forks_count, language, license, topics, updated_at, readme
|
||||
|
||||
### logo-fetcher.ts - Logo抓取引擎
|
||||
@@ -55,16 +60,21 @@
|
||||
- 10种抓取策略按优先级执行
|
||||
- 支持从SystemConfig读取配置
|
||||
- 每种成功方法返回中文名称
|
||||
- 所有 catch 块均添加 `console.warn` 日志(9处)
|
||||
|
||||
### logo-storage.ts - Logo本地存储
|
||||
- 导出 `downloadLogo(url, filename): Promise<string>`
|
||||
- 下载远程Logo到 `/public/logos/` 目录
|
||||
- 返回本地路径如 `/logos/filename.png`
|
||||
- **安全**: 最大文件大小 5MB
|
||||
- **安全**: SVG 内容自动消毒 script/iframe/on-event 标签
|
||||
- **哈希算法**: 使用 SHA256 生成文件名(不再使用 MD5)
|
||||
|
||||
### rate-limit.ts - 频率限制
|
||||
- `rateLimit(ip, maxRequests, windowMs)` — IP频率限制
|
||||
- 内存存储(Map)
|
||||
- 默认: 10次/分钟
|
||||
- **自动清理**: 每5分钟自动清理过期IP记录,防止内存无限增长
|
||||
|
||||
### use-permission.ts - 前端权限Hook
|
||||
- 客户端Hook
|
||||
@@ -75,7 +85,7 @@
|
||||
|
||||
## 脚本 (`scripts/`)
|
||||
|
||||
### 定时任务脚本(6个 + 1个日报,均含TaskLog记录)
|
||||
### 定时任务脚本(6个 + 1个日报 + 1个新闻推社区,均含TaskLog记录)
|
||||
|
||||
#### task1-discover-tools.mjs — Task1 发现AI工具
|
||||
- 每天06:00由Crontab触发
|
||||
@@ -87,6 +97,7 @@
|
||||
- 每天03:00由Crontab触发
|
||||
- 检查所有已发布Tool网站可访问性+Logo有效性,更新websiteOk/logoOk字段
|
||||
- 对PendingTool逐一检查,四项检查全部通过则自动发布为正式Tool
|
||||
- **FK回退**: categoryId为NULL时动态取数据库第一个有效分类(不再硬编码 `|| 1`)
|
||||
- 结果写入TaskLog(taskKey: task3-check-tools),含websiteFails/logoFails/autoPublished统计
|
||||
|
||||
#### task4 daily-discover.mjs — Task4 发现AI技能
|
||||
@@ -120,9 +131,16 @@
|
||||
- 入库DailyReport表
|
||||
- 结果写入TaskLog(taskKey: daily-news),含reportId/itemCount/title统计
|
||||
|
||||
#### task7-news-to-community.mjs — Task7 新闻推社区
|
||||
- 每天08:00由Crontab触发
|
||||
- 查询今日(或昨天)已发布日报 → 按新闻category映射到社区板块
|
||||
- 映射规则: product→ai-tools / business→ai-news / model→tech / opensource→tech / policy→ai-news / insight→discuss
|
||||
- 以admin用户身份创建ForumTopic,去重(按标题),更新板块topicCount
|
||||
- 结果写入TaskLog(taskKey: task7-news-to-community),含created/skipped统计
|
||||
|
||||
#### seed-task-configs.mjs — 任务配置种子数据
|
||||
- 一次性运行(幂等,创建或更新)
|
||||
- 初始化6个TaskConfig记录(task1/3/4/5/6 + daily-news)
|
||||
- 初始化7个TaskConfig记录(task1/3/4/5/6/7 + daily-news)
|
||||
- 含默认cronExpr、enabled=true、description
|
||||
|
||||
### 其他脚本
|
||||
@@ -191,9 +209,14 @@
|
||||
- 清空pending_tools表
|
||||
|
||||
### cron脚本 (shell)
|
||||
- `cron-daily-discover.sh` — 每日技能发现
|
||||
- `cron-daily-news.sh` — 每日新闻发现
|
||||
- `cron-task1.sh` — Task1定时任务
|
||||
- `cron-wrapper.sh` — 定时任务统一执行入口,自动 `source .env` + `set -a`/`set +a` 加载环境变量,创建日志目录,记录执行结果
|
||||
- `install-cron.sh` — 一键安装/更新 crontab(7个任务+日报+新闻推社区,全部通过wrapper执行)
|
||||
- `fix-db-url.sh` — 旧版数据库URL修复脚本(已被 fix-db-url.cjs 取代)
|
||||
|
||||
### lib/retry.mjs
|
||||
- 重试工具函数
|
||||
|
||||
### 修复/诊断脚本
|
||||
- `fix-db-url.cjs` — 批量修复所有 `.mjs` 脚本的 `mysql://` → `mariadb://` 协议兼容(PrismaMariaDb adapter 要求)
|
||||
- `fix-ts-types.cjs` — 批量移除 `.mjs` 文件中的 TypeScript 类型注解(`.mjs` 不支持 TS 语法)
|
||||
- `check-categories.cjs` — 检查数据库社区板块分类,输出所有 ForumCategory 的 id/name/slug
|
||||
|
||||
Reference in New Issue
Block a user