import { router, publicProcedure, isAdminMiddleware, isSigninMiddleware, } from "../trpc"; import { z } from "zod"; import { toolServiceFacade } from "../tool/application/facade"; import { toolSchema, updateToolsSchema, userToolSchema } from "@/lib/schemas/toolSchema"; import { v4 as uuidv4 } from "uuid"; export const toolsRouter = router({ getTools: publicProcedure.use(isAdminMiddleware).query(async ({ ctx }) => { return await toolServiceFacade.getAllTools(); }), getUserTools: publicProcedure .use(isSigninMiddleware) .input( z .object({ userId: z.string().optional(), }) .optional() ) .query(async ({ ctx, input }) => { const { db } = ctx; const actualUserId = input?.userId ? input.userId : ctx?.user?.userId; const userId = { value: actualUserId }; return await toolServiceFacade.getUserTools(userId); }), createTool: publicProcedure .use(isAdminMiddleware) .input( toolSchema.extend({ id: z .string() .uuid() .default(() => uuidv4()), }) ) .mutation(async ({ input, ctx }) => { const userId = { value: ctx.user.userId }; return await toolServiceFacade.createTool(input, userId); }), deleteTools: publicProcedure .use(isAdminMiddleware) .input( z.object({ toolIds:z.array(z.string()) }) ) .mutation(async ({ input, ctx }) => { const userId = { value: ctx.user.userId }; return await toolServiceFacade.deleteTools(input, userId); }), assignToolsToUsers: publicProcedure .use(isAdminMiddleware) .input( userToolSchema ) .mutation(async ({ input, ctx }) => { return await toolServiceFacade.assignUserToolsToUser(input.tools) }), updateTools: publicProcedure .use(isAdminMiddleware) .input( updateToolsSchema ) .mutation(async ({ input, ctx }) => { const userId={value:ctx.user.userId} return await toolServiceFacade.updateTools(input.tools,userId) }), });