import { hasPermission, Role } from "@/lib/validation/permissions"; import { createTRPCRouter, protectedProcedure } from "../trpc"; import { z } from "zod"; import { users } from "@/server/db/schema"; import { desc, eq } from "drizzle-orm"; import { userSchema } from "@/lib/validation/zod/user"; export const usersRouter = createTRPCRouter({ updateProfile: protectedProcedure .input(z.object({ profile: userSchema })) .mutation(async ({ ctx, input }) => { return await ctx.db .update(users) .set(input.profile) .where(eq(users.id, ctx.session.user.id)) .returning({ id: users.id }); }), getAll: protectedProcedure.query(async ({ ctx }) => { const isAdmin = hasPermission(ctx.session.user.role, Role.ADMIN); if (!isAdmin) throw new Error("You are not allowed to get all users"); return await ctx.db.query.users.findMany({ orderBy: desc(users.role), columns: { name: true, email: true, role: true, id: true, }, }); }), setPermission: protectedProcedure .input(z.object({ userId: z.string(), permission: z.number() })) .mutation(async ({ ctx, input }) => { const isAdmin = hasPermission(ctx.session.user.role, Role.ADMIN); if (!isAdmin) throw new Error("You are not allowed to set user permissions"); return await ctx.db .update(users) .set({ role: input.permission, }) .where(eq(users.id, input.userId)) .returning({ id: users.id }); }), });