import { router, publicProcedure, isAdminMiddleware, } from "../trpc"; import { z } from "zod"; import { materialServiceFacade } from "../material/application/facade"; import { v4 as uuidv4 } from 'uuid'; import { materialSchema, projectMaterialSchema } from "@/lib/schemas/materialSchema"; export const materialsRouter = router({ getMaterials: publicProcedure.query(async ({ctx}) => { return await materialServiceFacade.getAllMaterials() }), updateProjectMaterial: publicProcedure .use(isAdminMiddleware) .input( projectMaterialSchema.partial() ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} return await materialServiceFacade.updateProjectMaterial({...input},userId) }), addMaterialToProject: publicProcedure .use(isAdminMiddleware) .input( projectMaterialSchema.extend({ id:z.string().uuid().default(()=>uuidv4()) }) ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} const projectId={value:input.projectId} const materialId={value:input.materialId} return await materialServiceFacade.createProjectMaterial({...input,projectId,materialId},userId) }), createMaterial: publicProcedure .use(isAdminMiddleware) .input( materialSchema ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} return await materialServiceFacade.createMaterial(input,userId) }), deleteMaterials: publicProcedure .use(isAdminMiddleware) .input( z.object({ materialIds:z.array(z.string()) }) ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} return await materialServiceFacade.deleteMaterials(input,userId) }), deleteProjectMaterial: publicProcedure .use(isAdminMiddleware) .input( z.object({ materialId: z.string().uuid(), name:z.string(), projectName:z.string(), projectId:z.string() }) ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} return await materialServiceFacade.deleteProjectMaterials(input,userId) }), });