Build Phase 2 judge vertical slice

This commit is contained in:
2026-08-06 22:42:39 -06:00
parent e6329ecabb
commit ec274419c3
41 changed files with 2945 additions and 669 deletions

View File

@@ -1,13 +1,53 @@
import { Hono } from "hono"
import { getRequestSessionUser } from "./auth/session"
import { config } from "./config"
import { authRoutes } from "./routes/auth"
import { judgeServerRoutes } from "./routes/judge-server"
import { problemRoutes } from "./routes/problem"
import { submissionRoutes } from "./routes/submission"
import {
bridgeSubmissionEvents,
submissionWebSocketHandler,
type SubmissionSocketData,
} from "./websocket"
const app = new Hono()
app.get("/health", (c) => c.json({ ok: true }))
app.route("/api", authRoutes)
app.route("/api", problemRoutes)
app.route("/api", submissionRoutes)
app.route("/api", judgeServerRoutes)
export default {
port: 3000,
fetch: app.fetch,
}
app.onError((error, c) => {
console.error(error)
return c.json(
{ error: { code: "internal-error", message: "Internal server error" } },
500,
)
})
const server = Bun.serve<SubmissionSocketData>({
port: config.port,
async fetch(request, bunServer) {
const url = new URL(request.url)
if (url.pathname === "/ws/submissions") {
const user = await getRequestSessionUser(request)
if (!user) return new Response("Unauthorized", { status: 401 })
if (
bunServer.upgrade(request, {
data: { userId: user.id, username: user.username },
})
) {
return undefined
}
return new Response("WebSocket upgrade failed", { status: 400 })
}
return app.fetch(request)
},
websocket: submissionWebSocketHandler(),
})
await bridgeSubmissionEvents(server)
console.log(`OJ2 API listening on http://localhost:${server.port}`)