2025-08-07 14:50:40 +02:00
|
|
|
import { z } from "zod/v4";
|
2025-12-14 18:57:56 +01:00
|
|
|
import type { UsersUpdate } from "~/schemas/public/Users";
|
2025-08-28 18:27:07 +02:00
|
|
|
import type { UsersAnagraficaUpdate } from "~/schemas/public/UsersAnagrafica";
|
2025-08-04 17:45:44 +02:00
|
|
|
import {
|
2025-08-28 18:27:07 +02:00
|
|
|
adminProcedure,
|
|
|
|
|
createTRPCRouter,
|
|
|
|
|
protectedProcedure,
|
2025-08-04 17:45:44 +02:00
|
|
|
} from "~/server/api/trpc";
|
|
|
|
|
import {
|
2025-08-28 18:27:07 +02:00
|
|
|
blockUserHandler,
|
|
|
|
|
deleteUserHandler,
|
|
|
|
|
editAccountHandler,
|
|
|
|
|
editAnagraficaHandler,
|
|
|
|
|
getActiveUserWithoutChatHandler,
|
|
|
|
|
getUserHandler,
|
|
|
|
|
getUsersWithChatInfoHandler,
|
2025-08-04 17:45:44 +02:00
|
|
|
} from "~/server/controllers/user.controller";
|
|
|
|
|
import { db } from "~/server/db";
|
2025-11-20 16:48:29 +01:00
|
|
|
import { getClientProfilo } from "~/server/services/user.service";
|
2025-12-14 18:57:56 +01:00
|
|
|
import { checkCtxSession } from "~/server/utils/ctxChecker";
|
2025-08-28 18:27:07 +02:00
|
|
|
import { zUserId } from "~/server/utils/zod_types";
|
2025-08-04 17:45:44 +02:00
|
|
|
|
|
|
|
|
export const usersRouter = createTRPCRouter({
|
2025-08-29 16:18:32 +02:00
|
|
|
blockUser: adminProcedure
|
2025-08-28 18:27:07 +02:00
|
|
|
.input(
|
|
|
|
|
z.object({
|
|
|
|
|
id: zUserId,
|
|
|
|
|
}),
|
|
|
|
|
)
|
2025-08-29 16:18:32 +02:00
|
|
|
.mutation(async ({ ctx, input }) => {
|
|
|
|
|
return await blockUserHandler({ ctx, id: input.id });
|
2025-08-28 18:27:07 +02:00
|
|
|
}),
|
|
|
|
|
deleteUser: adminProcedure
|
|
|
|
|
.input(
|
|
|
|
|
z.object({
|
|
|
|
|
id: zUserId,
|
|
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.mutation(async ({ ctx, input }) => {
|
|
|
|
|
return await deleteUserHandler({ ctx, id: input.id });
|
|
|
|
|
}),
|
|
|
|
|
editUser: protectedProcedure
|
|
|
|
|
.input(
|
|
|
|
|
z.object({
|
2025-08-29 16:18:32 +02:00
|
|
|
id: zUserId,
|
2025-12-14 18:57:56 +01:00
|
|
|
data: z.custom<UsersUpdate>(),
|
2025-08-28 18:27:07 +02:00
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.mutation(async ({ ctx, input }) => {
|
2025-12-14 18:57:56 +01:00
|
|
|
checkCtxSession({ ctx });
|
|
|
|
|
return await editAccountHandler({ ...input });
|
2025-08-28 18:27:07 +02:00
|
|
|
}),
|
|
|
|
|
editUserAnagrafica: protectedProcedure
|
2025-11-10 16:27:15 +01:00
|
|
|
.input(
|
|
|
|
|
z.object({
|
|
|
|
|
userId: zUserId,
|
|
|
|
|
data: z.custom<UsersAnagraficaUpdate>(),
|
|
|
|
|
}),
|
|
|
|
|
)
|
2025-08-28 18:27:07 +02:00
|
|
|
.mutation(async ({ input }) => {
|
2025-11-10 16:27:15 +01:00
|
|
|
return await editAnagraficaHandler({ ...input });
|
2025-08-28 18:27:07 +02:00
|
|
|
}),
|
|
|
|
|
getActiveUsersWithoutChat: adminProcedure.query(async () => {
|
|
|
|
|
return await getActiveUserWithoutChatHandler({ db });
|
|
|
|
|
}),
|
2025-08-29 16:18:32 +02:00
|
|
|
getClientProfilo: protectedProcedure
|
|
|
|
|
.input(
|
|
|
|
|
z.object({
|
2025-11-10 16:27:15 +01:00
|
|
|
userId: zUserId,
|
2025-08-29 16:18:32 +02:00
|
|
|
}),
|
|
|
|
|
)
|
2025-11-10 16:27:15 +01:00
|
|
|
.query(async ({ input }) => {
|
2025-11-20 16:48:29 +01:00
|
|
|
return getClientProfilo({
|
2025-08-29 16:18:32 +02:00
|
|
|
db,
|
2025-11-10 16:27:15 +01:00
|
|
|
userId: input.userId,
|
2025-08-29 16:18:32 +02:00
|
|
|
});
|
|
|
|
|
}),
|
|
|
|
|
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;
|
|
|
|
|
}),
|
2025-10-17 18:12:10 +02:00
|
|
|
getUsersWChatInfo: adminProcedure.query(async () => {
|
2025-08-28 18:27:07 +02:00
|
|
|
return await getUsersWithChatInfoHandler({ db });
|
|
|
|
|
}),
|
2025-12-03 16:16:28 +01:00
|
|
|
getAdmins: adminProcedure.query(async () => {
|
|
|
|
|
return await db
|
|
|
|
|
.selectFrom("users")
|
|
|
|
|
.selectAll()
|
|
|
|
|
.where("isAdmin", "=", true)
|
|
|
|
|
.orderBy("id", "desc")
|
|
|
|
|
.execute();
|
|
|
|
|
}),
|
2025-08-04 17:45:44 +02:00
|
|
|
});
|