userHandlers.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. export function userHandlers(_io, socket) {
  2. socket.on("user:read", readUser)
  3. socket.on("user:list", listUsers)
  4. socket.on("user:paginate", paginateUsers)
  5. socket.on("user:count", countUsers)
  6. socket.on("user:delete", deleteUser)
  7. socket.on("user:create", createUser)
  8. socket.on("user:update", updateUser)
  9. const userHandlerOptions = {
  10. user: socket.data?.user,
  11. resource: "user",
  12. idValidator: userSchema.shape.id.parse
  13. }
  14. async function readUser(id, callback) {
  15. await userHandler({
  16. id,
  17. callback,
  18. query: ({ id }) =>
  19. prisma.user.findUnique({
  20. omit: { banned: true, banReason: true, banExpires: true },
  21. where: { id }
  22. })
  23. })
  24. }
  25. async function listUsers(callback) {
  26. await userHandler({
  27. callback,
  28. query: () =>
  29. prisma.user.findMany({
  30. omit: { banned: true, banReason: true, banExpires: true },
  31. orderBy: [{ createdAt: "asc" }]
  32. })
  33. })
  34. }
  35. async function paginateUsers(skip, take, callback) {
  36. await userHandler({
  37. callback,
  38. query: () =>
  39. prisma.user.findMany({
  40. omit: { banned: true, banReason: true, banExpires: true },
  41. orderBy: [{ createdAt: "asc" }],
  42. skip,
  43. take
  44. })
  45. })
  46. }
  47. async function countUsers(callback) {
  48. await userHandler({ callback, query: () => prisma.user.count() })
  49. }
  50. async function deleteUser(id, callback) {
  51. await userHandler({
  52. callback,
  53. permissions: ["delete"],
  54. id,
  55. mutator: (rawResult) => _pick(rawResult, ["id"]),
  56. query: ({ id }) => prisma.user.delete({ where: { id } })
  57. })
  58. }
  59. async function createUser(data, callback) {
  60. await userHandler({
  61. callback,
  62. permissions: ["create"],
  63. data,
  64. validator: createUserSchema.parse,
  65. query: ({ data }) =>
  66. serverAuth().api.createUser({
  67. body: {
  68. ..._omit(data, "username"),
  69. data: { username: data.username }
  70. }
  71. })
  72. })
  73. }
  74. async function updateUser(id, data, callback) {
  75. await userHandler({
  76. callback,
  77. permissions: ["update"],
  78. id,
  79. data,
  80. validator: updateUserSchema.parse,
  81. query: ({ id, data }) => prisma.user.update({ where: { id }, data })
  82. })
  83. }
  84. async function userHandler(options) {
  85. return await executeQuery({ ...userHandlerOptions, ...options })
  86. }
  87. }