import { z } from "zod/v4"; import type { UsersAnagraficaUpdate } from "~/schemas/public/UsersAnagrafica"; import { adminProcedure, createTRPCRouter, protectedProcedure, } from "~/server/api/trpc"; import { blockUserHandler, deleteUserHandler, editAccountHandler, editAnagraficaHandler, getActiveUserWithoutChatHandler, getUserHandler, getUsersWithChatInfoHandler, } from "~/server/controllers/user.controller"; import { db } from "~/server/db"; import { getClientProfilo } from "~/server/services/user.service"; import { zUserId } from "~/server/utils/zod_types"; export const usersRouter = createTRPCRouter({ blockUser: adminProcedure .input( z.object({ id: zUserId, }), ) .mutation(async ({ ctx, input }) => { return await blockUserHandler({ ctx, id: input.id }); }), deleteUser: adminProcedure .input( z.object({ id: zUserId, }), ) .mutation(async ({ ctx, input }) => { return await deleteUserHandler({ ctx, id: input.id }); }), editUser: protectedProcedure .input( z.object({ cognome: z.string(), email: z.email(), id: zUserId, isAdmin: z.boolean().optional(), nome: z.string(), telefono: z.string(), }), ) .mutation(async ({ ctx, input }) => { return await editAccountHandler({ ctx, input }); }), editUserAnagrafica: protectedProcedure .input( z.object({ userId: zUserId, data: z.custom(), }), ) .mutation(async ({ input }) => { return await editAnagraficaHandler({ ...input }); }), getActiveUsersWithoutChat: adminProcedure.query(async () => { return await getActiveUserWithoutChatHandler({ db }); }), getClientProfilo: protectedProcedure .input( z.object({ userId: zUserId, }), ) .query(async ({ input }) => { return getClientProfilo({ db, userId: input.userId, }); }), getUser: protectedProcedure .input( z.object({ id: zUserId, }), ) .query(async ({ input }) => { return await getUserHandler({ db, id: input.id }); }), getUsers: adminProcedure.query(async () => { const query = await db .selectFrom("users") .selectAll() .orderBy("id", "desc") .execute(); return query; }), getUsersWChatInfo: adminProcedure.query(async () => { return await getUsersWithChatInfoHandler({ db }); }), getAdmins: adminProcedure.query(async () => { return await db .selectFrom("users") .selectAll() .where("isAdmin", "=", true) .orderBy("id", "desc") .execute(); }), });