feat(阶段3): oj 侧端点铺开(基线提交,未经评审)
由外部 agent (Codex) 在本会话额度中断期间完成。原样提交作为基线, 后续修复单独成 commit,便于区分与回退。 覆盖 oj 侧 65 个端点,新增 9 组路由(account/achievement/ai/classroom/ content/contest/flowchart/problemset/site)与对应 Zod 契约。 已核验:tsc --noEmit 退出码 0;API 可启动;/api/problems 返回真实数据; judge 与 flowchart worker 均 ready。 未核验:权限边界与数据泄露,评审进行中。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
38
apps/api/src/services/options.ts
Normal file
38
apps/api/src/services/options.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { inArray } from "drizzle-orm"
|
||||
|
||||
import { db, schema } from "../db"
|
||||
|
||||
export const websiteOptionDefaults = {
|
||||
website_base_url: "http://127.0.0.1",
|
||||
website_name: "Online Judge",
|
||||
website_name_shortcut: "oj",
|
||||
website_footer: "Online Judge Footer",
|
||||
allow_register: true,
|
||||
submission_list_show_all: true,
|
||||
class_list: [] as string[],
|
||||
enable_maxkb: true,
|
||||
}
|
||||
|
||||
export async function getOptions<const T extends readonly string[]>(keys: T) {
|
||||
const rows = await db
|
||||
.select({ key: schema.optionsSysoptions.key, value: schema.optionsSysoptions.value })
|
||||
.from(schema.optionsSysoptions)
|
||||
.where(inArray(schema.optionsSysoptions.key, [...keys]))
|
||||
return Object.fromEntries(rows.map((row) => [row.key, row.value])) as Record<T[number], unknown>
|
||||
}
|
||||
|
||||
export async function getWebsiteOptions() {
|
||||
const keys = Object.keys(websiteOptionDefaults) as Array<keyof typeof websiteOptionDefaults>
|
||||
const values = await getOptions(keys)
|
||||
return Object.fromEntries(
|
||||
keys.map((key) => [key, values[key] ?? websiteOptionDefaults[key]]),
|
||||
) as typeof websiteOptionDefaults
|
||||
}
|
||||
|
||||
export async function getBooleanOption(
|
||||
key: keyof typeof websiteOptionDefaults,
|
||||
fallback: boolean,
|
||||
) {
|
||||
const values = await getOptions([key])
|
||||
return typeof values[key] === "boolean" ? values[key] : fallback
|
||||
}
|
||||
Reference in New Issue
Block a user