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)
}),
});