重判、提交统计、流程图统计这三条挂在旧后端的 admin 路由下,权限也确实是 teacher/super admin,但入口在用户侧页面里(提交列表页的重判按钮、两个统计面板)。 不做完,阶段 3 的出口标准「用户侧全部功能跑在新后端上」就不成立 —— 按 URL 前缀切阶段会漏掉它们。 - POST submissions/:id/rejudge ← GET admin/submission/rejudge - GET submissions/statistics ← GET admin/submission/statistics - GET flowcharts/statistics ← GET admin/flowchart/statistics 几处对齐旧后端的细节: - AST_CHECK_FAILED(10) 与 ACCEPTED(0) 同算通过 - 完成度先用原始花名册人数算、再修正 person_count,顺序照搬,兜住「学生已删号 但提交记录还在」 - 有提交但零通过的学生,两个名单里都不出现(旧后端同样口径) - 词云用 @node-rs/jieba,STOPWORDS 与 38 个自定义词逐词照搬;jieba@2 没有 insertWord,改用 loadDict 加载用户词典 - avgScore 分母是有分数的条数,对齐 Django Avg() 跳过 NULL rejudge 的 jobId 带时间戳。队列保留最近 100 个已完成任务,沿用 submissionId 做 jobId 的话 BullMQ 会认为任务已存在,重判会静默变成空操作。 correctRate 改成数值不带 %,展示格式化交给前端。stripClassPrefix 用 startsWith+slice 而不是 replace,前缀对不上时不会从中间截出乱码;site.ts 原有的 replace 写法一并改掉。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
33 lines
834 B
JSON
33 lines
834 B
JSON
{
|
|
"name": "@oj2/api",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "bun run --parallel dev:http dev:worker",
|
|
"dev:http": "bun --watch src/index.ts",
|
|
"dev:worker": "bun --watch src/worker.ts",
|
|
"start": "bun src/index.ts",
|
|
"worker": "bun src/worker.ts",
|
|
"seed:dev": "bun src/scripts/seed-dev.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:pull": "drizzle-kit pull"
|
|
},
|
|
"dependencies": {
|
|
"@node-rs/jieba": "^2.0.1",
|
|
"@oj2/contract": "workspace:*",
|
|
"bullmq": "^6.0.9",
|
|
"drizzle-orm": "^0.45.2",
|
|
"hono": "^4.0.0",
|
|
"ioredis": "^6.0.0",
|
|
"postgres": "^3.4.0",
|
|
"tree-sitter-c": "^0.24.1",
|
|
"tree-sitter-python": "^0.25.0",
|
|
"web-tree-sitter": "^0.26.11",
|
|
"zod": "^4.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"drizzle-kit": "^0.31.10"
|
|
}
|
|
}
|