Spaces:
Sleeping
Sleeping
| /** | |
| * API route definitions. | |
| * | |
| * GET /api/health β liveness probe | |
| * GET /api/content β full content catalogue | |
| * GET /api/users β mock user profiles | |
| * POST /api/recommend β personalised top-3 recommendations | |
| */ | |
| import { Router } from "express"; | |
| import { CONTENT_ITEMS, USER_PROFILES } from "./data.js"; | |
| import { recommend } from "./recommender.js"; | |
| export const apiRouter = Router(); | |
| // --------------------------------------------------------------------------- | |
| // Health | |
| // --------------------------------------------------------------------------- | |
| apiRouter.get("/health", (_req, res) => { | |
| res.json({ status: "ok" }); | |
| }); | |
| // --------------------------------------------------------------------------- | |
| // Content catalogue | |
| // --------------------------------------------------------------------------- | |
| apiRouter.get("/content", (_req, res) => { | |
| res.json(CONTENT_ITEMS); | |
| }); | |
| // --------------------------------------------------------------------------- | |
| // User profiles | |
| // --------------------------------------------------------------------------- | |
| apiRouter.get("/users", (_req, res) => { | |
| res.json(USER_PROFILES); | |
| }); | |
| // --------------------------------------------------------------------------- | |
| // Recommend | |
| // --------------------------------------------------------------------------- | |
| apiRouter.post("/recommend", async (req, res) => { | |
| try { | |
| const profile = req.body; | |
| if (!profile.goal || !profile.interest_tags?.length) { | |
| return res.status(400).json({ | |
| error: "A learning goal and at least one interest tag are required.", | |
| }); | |
| } | |
| const result = await recommend(profile); | |
| res.json(result); | |
| } catch (err) { | |
| console.error("[recommend]", err.message); | |
| res.status(500).json({ error: "Recommendation pipeline failed." }); | |
| } | |
| }); | |