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 };
Source