feat(阶段1): Hono 应用与题目列表接口,读通本地真实数据
This commit is contained in:
13
apps/api/src/index.ts
Normal file
13
apps/api/src/index.ts
Normal 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,
|
||||
}
|
||||
25
apps/api/src/routes/problem.ts
Normal file
25
apps/api/src/routes/problem.ts
Normal 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 })
|
||||
})
|
||||
Reference in New Issue
Block a user