task-managment / src / server / routers / tools.ts
tools.ts
Raw
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)
    }),
});