From 36a46631930d075a63015b456474721c0d86834a Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 25 Aug 2026 23:32:50 -0600 Subject: [PATCH] =?UTF-8?q?chore(=E5=89=8D=E7=AB=AF):=20=E6=B8=85=E6=8E=89?= =?UTF-8?q?=E5=9B=9B=E5=A4=84=E9=9B=B6=E5=BC=95=E7=94=A8=E7=9A=84=E6=AD=BB?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按名字扫了一遍 api 层导出和 utils 常量,四处全仓零引用: **`getContestProblem`**(admin/api.ts)—— 和紧挨在它上面的 `getProblem` 逐字 相同,同一个 URL、同一个类型。旧后端 admin 侧比赛题和公开题是两个端点,合并 之后这个壳留下来了。 **`createMessage`**(oj/api.ts)—— 两代前端都只有定义没有调用。参数名还是旧 后端那套(recipient / submission),函数体里再映射成契约的 recipientId / submissionId,等于给一个不存在的调用方写了个兼容层。 d3b05b8 删掉了它的类型 CreateMessage,函数漏了。 后端 `POST /messages` 是完整实现的,只是后台那个页面 (admin/communication/messages.vue)两代都是一句「未完待续」的占位。 在端点上加了注释说明这件事,免得下次扫「无人调用的端点」时被当成可删。 **`CONTEST_TYPE`**(constants.ts)—— 和上面 30 行处的 `ContestType` 枚举 一模一样。枚举那份有 8 处在用,这个对象零引用。 **`LANGUAGE_ID`**(constants.ts)—— Judge0 的语言 id。真正在用的那份在 utils/judge.ts 的 JUDGE0_LANGUAGE_ID,而且**只有那份是对的**:死掉的这份把 Golang / JavaScript / Python2 全写成了 0,谁要是拿它去调 Judge0,这三种语言 的在线试运行会静默发出 `language_id: 0`。 顺带确认过没有 `constants["LANGUAGE_ID"]` 这类动态取值。 验证:vue-tsc 0 error、vite build 通过、tsc(apps/api) 0 error、 check:routes 168 条无遮蔽。四处都是零文本引用的纯删除。 Co-Authored-By: Claude Opus 5 --- apps/api/src/routes/content.ts | 6 ++++++ apps/web/src/admin/api.ts | 4 ---- apps/web/src/oj/api.ts | 12 ------------ apps/web/src/utils/constants.ts | 17 ----------------- 4 files changed, 6 insertions(+), 33 deletions(-) diff --git a/apps/api/src/routes/content.ts b/apps/api/src/routes/content.ts index 635a549..1fa94b7 100644 --- a/apps/api/src/routes/content.ts +++ b/apps/api/src/routes/content.ts @@ -109,6 +109,12 @@ contentRoutes.get("/messages", requireAuth, async (c) => { })) }) +/** + * 发站内信。**目前没有任何前端在调用它** —— 后台那个页面 + * (apps/web/src/admin/communication/messages.vue)两代前端都只是一句 + * 「未完待续」的占位,ojnext 里定义过一个 createMessage 但同样零调用, + * 已在前端删掉。端点本身是完整实现的,要接 UI 从这里开始。 + */ contentRoutes.post("/messages", requireSuperAdmin, async (c) => { const user = c.get("user")! const parsed = createMessageRequestSchema.safeParse(await c.req.json().catch(() => null)) diff --git a/apps/web/src/admin/api.ts b/apps/web/src/admin/api.ts index 42ee66f..2b6613c 100644 --- a/apps/web/src/admin/api.ts +++ b/apps/web/src/admin/api.ts @@ -110,10 +110,6 @@ export function getProblem(id: string | number) { return api.get(`admin/problems/${id}`) } -export function getContestProblem(id: number) { - return api.get(`admin/problems/${id}`) -} - // 标签管理 export function getTagAdminList(keyword = "") { return api.get("admin/problem-tags", { params: { keyword } }) diff --git a/apps/web/src/oj/api.ts b/apps/web/src/oj/api.ts index 9a9d003..cbda74d 100644 --- a/apps/web/src/oj/api.ts +++ b/apps/web/src/oj/api.ts @@ -270,18 +270,6 @@ export function getAnnouncement(id: number) { return api.get(`announcements/${id}`) } -export function createMessage(data: { - recipient: number - message: string - submission: string -}) { - return api.post("messages", { - recipientId: data.recipient, - message: data.message, - submissionId: data.submission, - }) -} - export function getMessageList(offset = 0, limit = 10) { // language 的收窄同 getSubmissions,见那里的说明 return api.get<{ results: Message[]; total: number }>("messages", { diff --git a/apps/web/src/utils/constants.ts b/apps/web/src/utils/constants.ts index 46d1641..afe47f9 100644 --- a/apps/web/src/utils/constants.ts +++ b/apps/web/src/utils/constants.ts @@ -132,11 +132,6 @@ export const CONTEST_STATUS: { }, } -export const CONTEST_TYPE = { - PUBLIC: "Public", - PRIVATE: "Password Protected", -} - export const USER_TYPE = { REGULAR_USER: "Regular User", STUDENT_ADMIN: "Student Admin", @@ -185,18 +180,6 @@ export const SOURCES = { SQL: "", } as const -export const LANGUAGE_ID = { - C: 50, - "C++": 54, - Java: 62, - Python3: 71, - Python2: 0, - JavaScript: 0, - Golang: 0, - Flowchart: 0, - SQL: 0, -} as const - export const LANGUAGE_FORMAT_VALUE = { C: "c", "C++": "cpp",