import type { Application, Request, RequestHandler, Response } from "express"; import { Router } from "express"; import { z } from "zod/v4"; import type { NetworkSharePublicationUseCases } from "../../application/network-share-publication.use-cases"; const ScopeSchema = z.strictObject({ companyId: z.uuid() }); function fail(response: Response, code: string) { response .status(code === "INVALID_REQUEST" ? 400 : code.endsWith("NOT_FOUND") ? 404 : 409) .json({ code, requestId: response.getHeader("x-request-id") }); } function scope(request: Request) { return z.object({ companyId: z.uuid(), userId: z.uuid() }).safeParse({ ...request.params, userId: z .object({ userId: z.uuid() }) .safeParse("session" in request ? request.session : undefined).data?.userId, }); } export function registerNetworkSharePublicationRoutes( app: Application, service: NetworkSharePublicationUseCases, authenticate: RequestHandler ) { const router = Router(); router.post("/:companyId", (request, response, next) => { const context = scope(request); if ( !( context.success && ScopeSchema.safeParse(request.params).success && z.strictObject({}).safeParse(request.query).success ) ) { fail(response, "INVALID_REQUEST"); return; } service .execute(context.data.companyId, request.body, context.data.userId) .then((result) => { if (!result.isSuccess) { fail(response, result.error.code); return; } response.json({ publication: result.data.toPrimitive() }); }) .catch(next); }); router.get("/:companyId", (request, response, next) => { const context = scope(request); if (!(context.success && ScopeSchema.safeParse(request.params).success)) { fail(response, "INVALID_REQUEST"); return; } service .list(context.data.companyId, request.query, context.data.userId) .then((result) => { if (!result.isSuccess) { fail(response, result.error.code); return; } response.json(result.data); }) .catch(next); }); app.use("/api/asset-network-share-publications", authenticate, router); }