import { z } from "zod"; import { createTRPCRouter, controllerProcedure, type TRPCContext } from "../trpc.js"; import { createComputationGraphDetailProcedures } from "./computation-graph-detail.js"; import { readProjectGraphSnapshot } from "./computation-graph-project.js"; import { readResourceGraphSnapshot } from "./computation-graph-resource.js"; import { type GraphLink, type GraphNode } from "./computation-graph-shared.js"; export type { GraphLink, GraphNode } from "./computation-graph-shared.js"; const resourceGraphInputSchema = z.object({ resourceId: z.string(), month: z.string().regex(/^\d{4}-\d{2}$/), }); const projectGraphInputSchema = z.object({ projectId: z.string(), }); const computationGraphDetailProcedures = createComputationGraphDetailProcedures({ resourceGraphInputSchema, projectGraphInputSchema, readResourceGraphSnapshot, readProjectGraphSnapshot, }); // ─── Router ───────────────────────────────────────────────────────────────── export const computationGraphRouter = createTRPCRouter({ ...computationGraphDetailProcedures, /** * Resource View: SAH, Allocation, Rules, Chargeability, Budget * for a single resource in a single month. */ getResourceData: controllerProcedure .input(resourceGraphInputSchema) .query(({ ctx, input }) => readResourceGraphSnapshot(ctx, input)), /** * Project View: Estimate, Commercial, Experience, Effort, Spread, Budget */ getProjectData: controllerProcedure .input(projectGraphInputSchema) .query(({ ctx, input }) => readProjectGraphSnapshot(ctx, input)), });