Source

routes/link.routes.js

import { LinkController } from "@controllers/link.controller";
import { asyncHandler } from "@utils/asyncHandler";
import { Router } from "express";
import { requireAuthenticated } from "middlewares/auth";
import { validateRequest } from "../middlewares/validateRequest";
import { CreateLinkBodySchema, GetInvestigationLinksParamsSchema, ResolveLinkParamsSchema, } from "../schemas/url.validation";
/**
 * Link routes (public resolve + protected investigation-scoped list/create).
 * - GET/POST /investigation/:id require auth.
 * - GET /:key/:subLink is public (resolve).
 * @category Routes
 */
const router = Router();
/**
 * GET /api/link/investigation/:id
 * List all links for an investigation
 */
router.get("/investigation/:id", requireAuthenticated, validateRequest({
    params: GetInvestigationLinksParamsSchema,
}), asyncHandler((req, res) => LinkController.getLinks(req, res)));
/**
 * POST /api/link/investigation/:id
 * Create a new link for an investigation (subLink optional; autogenerated if omitted)
 */
router.post("/investigation/:id", requireAuthenticated, validateRequest({
    params: GetInvestigationLinksParamsSchema,
    body: CreateLinkBodySchema,
}), asyncHandler((req, res) => LinkController.createLink(req, res)));
/**
 * GET /api/link/:key/:subLink
 * Resolve a link: return investigation id and increment visit count (public, no auth).
 */
router.get("/:key/:subLink", validateRequest({
    params: ResolveLinkParamsSchema,
}), asyncHandler((req, res) => LinkController.resolveLink(req, res)));
export { router as linkRoutes };