From 44f6f2784156145daf6d03472fa4eb78d62cfd61 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Fri, 7 Aug 2026 06:48:20 -0600 Subject: [PATCH] =?UTF-8?q?chore(=E9=98=B6=E6=AE=B53):=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=98=B6=E6=AE=B5=201=20=E7=9A=84=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GET /api/dev/problems、dev-problems.vue、对应路由项,以及只服务于它的 problemSummarySchema。阶段 1 用来验证「能从真实库读出一道题」,已完成使命。 Co-Authored-By: Claude Opus 5 --- apps/api/src/routes/problem.ts | 20 -------------------- apps/web/src/oj/dev-problems.vue | 31 ------------------------------- apps/web/src/routes.ts | 1 - packages/contract/src/problem.ts | 12 ------------ 4 files changed, 64 deletions(-) delete mode 100644 apps/web/src/oj/dev-problems.vue diff --git a/apps/api/src/routes/problem.ts b/apps/api/src/routes/problem.ts index 4fbabf5..117352f 100644 --- a/apps/api/src/routes/problem.ts +++ b/apps/api/src/routes/problem.ts @@ -3,7 +3,6 @@ import { problemDetailSchema, problemListItemSchema, problemListSchema, - problemSummarySchema, tagSchema, yearlyAcSchema, } from "@oj2/contract" @@ -228,25 +227,6 @@ problemRoutes.get("/problems/:displayId/yearly-ac", async (c) => { return success(c, rows.map((row) => yearlyAcSchema.parse({ ...row, acRate: row.total > 0 ? Math.round(row.accepted / row.total * 10_000) / 100 : 0 }))) }) -problemRoutes.get("/dev/problems", async (c) => { - const rows = await db - .select({ - id: schema.problem.id, - _id: schema.problem.displayId, - title: schema.problem.title, - difficulty: schema.problem.difficulty, - submissionNumber: schema.problem.submissionNumber, - acceptedNumber: schema.problem.acceptedNumber, - }) - .from(schema.problem) - .where(and(eq(schema.problem.visible, true), isNull(schema.problem.contestId))) - .orderBy(desc(schema.problem.id)) - .limit(20) - - const data = rows.map((row) => problemSummarySchema.parse(row)) - return success(c, data) -}) - problemRoutes.get("/problems/:displayId", optionalAuth, async (c) => { const [row] = await db .select({ diff --git a/apps/web/src/oj/dev-problems.vue b/apps/web/src/oj/dev-problems.vue deleted file mode 100644 index 3003da1..0000000 --- a/apps/web/src/oj/dev-problems.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/apps/web/src/routes.ts b/apps/web/src/routes.ts index 197674a..b815626 100644 --- a/apps/web/src/routes.ts +++ b/apps/web/src/routes.ts @@ -5,7 +5,6 @@ export const ojs: RouteRecordRaw = { component: () => import("shared/layout/default.vue"), children: [ { path: "", component: () => import("oj/problem/list.vue") }, - { path: "dev-problems", component: () => import("oj/dev-problems.vue") }, { path: "problem/:problemID", component: () => import("oj/problem/detail.vue"), diff --git a/packages/contract/src/problem.ts b/packages/contract/src/problem.ts index dd93fa8..a533302 100644 --- a/packages/contract/src/problem.ts +++ b/packages/contract/src/problem.ts @@ -2,18 +2,6 @@ import { z } from "zod" import { paginatedSchema, sampleUserSchema } from "./common" -/** 题目列表项。字段取自 problem 表,只含列表页需要的列。 */ -export const problemSummarySchema = z.object({ - id: z.number().int(), - _id: z.string(), // 展示用编号,与自增 id 不同 - title: z.string(), - difficulty: z.string(), - submissionNumber: z.number().int(), - acceptedNumber: z.number().int(), -}) - -export type ProblemSummary = z.infer - export const problemDetailSchema = z.object({ id: z.number().int(), _id: z.string(),