feat(阶段1): Hono 应用与题目列表接口,读通本地真实数据

This commit is contained in:
2026-08-06 21:14:58 -06:00
parent 0a8fcef3f2
commit 3c975e85ee
2 changed files with 38 additions and 0 deletions

13
apps/api/src/index.ts Normal file
View File

@@ -0,0 +1,13 @@
import { Hono } from "hono"
import { problemRoutes } from "./routes/problem"
const app = new Hono()
app.get("/health", (c) => c.json({ ok: true }))
app.route("/api", problemRoutes)
export default {
port: 3000,
fetch: app.fetch,
}

View File

@@ -0,0 +1,25 @@
import { problemSummarySchema } from "@oj2/contract"
import { desc } from "drizzle-orm"
import { Hono } from "hono"
import { db, schema } from "../db"
export const problemRoutes = new Hono()
problemRoutes.get("/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)
.orderBy(desc(schema.problem.id))
.limit(20)
const data = rows.map((row) => problemSummarySchema.parse(row))
return c.json({ data })
})