| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- export function userHandlers(_io, socket) {
- socket.on("user:read", readUser)
- socket.on("user:list", listUsers)
- socket.on("user:paginate", paginateUsers)
- socket.on("user:count", countUsers)
- socket.on("user:delete", deleteUser)
- socket.on("user:create", createUser)
- socket.on("user:update", updateUser)
- const userHandlerOptions = {
- user: socket.data?.user,
- resource: "user",
- idValidator: userSchema.shape.id.parse
- }
- async function readUser(id, callback) {
- await userHandler({
- id,
- callback,
- query: ({ id }) =>
- prisma.user.findUnique({
- omit: { banned: true, banReason: true, banExpires: true },
- where: { id }
- })
- })
- }
- async function listUsers(callback) {
- await userHandler({
- callback,
- query: () =>
- prisma.user.findMany({
- omit: { banned: true, banReason: true, banExpires: true },
- orderBy: [{ createdAt: "asc" }]
- })
- })
- }
- async function paginateUsers(skip, take, callback) {
- await userHandler({
- callback,
- query: () =>
- prisma.user.findMany({
- omit: { banned: true, banReason: true, banExpires: true },
- orderBy: [{ createdAt: "asc" }],
- skip,
- take
- })
- })
- }
- async function countUsers(callback) {
- await userHandler({ callback, query: () => prisma.user.count() })
- }
- async function deleteUser(id, callback) {
- await userHandler({
- callback,
- permissions: ["delete"],
- id,
- mutator: (rawResult) => _pick(rawResult, ["id"]),
- query: ({ id }) => prisma.user.delete({ where: { id } })
- })
- }
- async function createUser(data, callback) {
- await userHandler({
- callback,
- permissions: ["create"],
- data,
- validator: createUserSchema.parse,
- query: ({ data }) =>
- serverAuth().api.createUser({
- body: {
- ..._omit(data, "username"),
- data: { username: data.username }
- }
- })
- })
- }
- async function updateUser(id, data, callback) {
- await userHandler({
- callback,
- permissions: ["update"],
- id,
- data,
- validator: updateUserSchema.parse,
- query: ({ id, data }) => prisma.user.update({ where: { id }, data })
- })
- }
- async function userHandler(options) {
- return await executeQuery({ ...userHandlerOptions, ...options })
- }
- }
|