import { Hono } from "hono"; import type { AppContext } from "../lib/app-context.js"; import { healthRoutes, createHealthRoutes } from "./health.js"; import { createForumRoutes } from "./forum.js"; import { createCategoriesRoutes } from "./categories.js"; import { createBoardsRoutes } from "./boards.js"; import { createTopicsRoutes } from "./topics.js"; import { createPostsRoutes } from "./posts.js"; import { createAuthRoutes } from "./auth.js"; import { createAdminRoutes } from "./admin.js"; import { createModRoutes } from "./mod.js"; import { createThemesRoutes, createThemePolicyRoutes } from "./themes.js"; /** * Factory function that creates all API routes with access to app context. */ export function createApiRoutes(ctx: AppContext) { return new Hono() .route("/healthz", healthRoutes) .route("/", createHealthRoutes(ctx)) .route("/auth", createAuthRoutes(ctx)) .route("/forum", createForumRoutes(ctx)) .route("/categories", createCategoriesRoutes(ctx)) .route("/boards", createBoardsRoutes(ctx)) .route("/topics", createTopicsRoutes(ctx)) .route("/posts", createPostsRoutes(ctx)) .route("/admin", createAdminRoutes(ctx)) .route("/mod", createModRoutes(ctx)) .route("/themes", createThemesRoutes(ctx)) .route("/theme-policy", createThemePolicyRoutes(ctx)); } // Export stub routes for tests that don't need database access const stubForumRoutes = new Hono().get("/", (c) => c.json({ name: "My atBB Forum", description: "A forum on the ATmosphere", did: "did:plc:placeholder", }) ); const stubCategoriesRoutes = new Hono().get("/", (c) => c.json({ categories: [] }) ); const stubBoardsRoutes = new Hono().get("/", (c) => c.json({ boards: [] }) ); const stubTopicsRoutes = new Hono() .get("/:id", (c) => { const { id } = c.req.param(); return c.json({ topicId: id, post: null, replies: [] }); }) .post("/", (c) => c.json({ error: "not implemented" }, 501)); const stubPostsRoutes = new Hono().post("/", (c) => c.json({ error: "not implemented" }, 501) ); export const apiRoutes = new Hono() .route("/healthz", healthRoutes) .route("/forum", stubForumRoutes) .route("/categories", stubCategoriesRoutes) .route("/boards", stubBoardsRoutes) .route("/topics", stubTopicsRoutes) .route("/posts", stubPostsRoutes);