feat(26-02): discovery HTTP routes, server registration, and route tests

- Create src/server/routes/discovery.ts with GET /setups, /items, /categories handlers
- Register discoveryRoutes in src/server/index.ts with browseTier rate limiting
- Add auth skip for /api/discovery/* GET requests in auth middleware
- Create tests/routes/discovery.test.ts with 10 tests covering all endpoints and pagination
This commit is contained in:
2026-04-10 14:57:35 +02:00
parent a00b90d97a
commit 0323e0cd33
3 changed files with 287 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
import { Hono } from "hono";
import {
getPopularSetups,
getRecentGlobalItems,
getTrendingCategories,
} from "../services/discovery.service.ts";
type Env = { Variables: { db?: any } };
const app = new Hono<Env>();
app.get("/setups", async (c) => {
const db = c.get("db");
const limitParam = c.req.query("limit");
const cursor = c.req.query("cursor");
const limit = Math.min(limitParam ? parseInt(limitParam, 10) || 6 : 6, 50);
const result = await getPopularSetups(db, limit, cursor);
return c.json(result);
});
app.get("/items", async (c) => {
const db = c.get("db");
const limitParam = c.req.query("limit");
const cursor = c.req.query("cursor");
const limit = Math.min(limitParam ? parseInt(limitParam, 10) || 8 : 8, 50);
const result = await getRecentGlobalItems(db, limit, cursor);
return c.json(result);
});
app.get("/categories", async (c) => {
const db = c.get("db");
const limitParam = c.req.query("limit");
const limit = Math.min(limitParam ? parseInt(limitParam, 10) || 12 : 12, 50);
const result = await getTrendingCategories(db, limit);
return c.json(result);
});
export { app as discoveryRoutes };