Kaynağa Gözat

add __typename field to returned characters

Jason Gorst 3 hafta önce
ebeveyn
işleme
57ba63ae6e
1 değiştirilmiş dosya ile 32 ekleme ve 10 silme
  1. 32 10
      server/socketio/handlers/characterHandlers.js

+ 32 - 10
server/socketio/handlers/characterHandlers.js

@@ -6,12 +6,6 @@ export function characterHandlers(_io, socket) {
   socket.on("character:update", updateCharacter)
   socket.on("character:options", fetchCharacterOptions)
 
-  const characterHandlerOptions = {
-    user: socket.data?.user,
-    resource: "character",
-    idValidator: characterSchema.shape.id.parse
-  }
-
   async function readCharacter(id, callback) {
     await characterHandler({
       callback,
@@ -44,7 +38,7 @@ export function characterHandlers(_io, socket) {
     const character = await characterHandler({
       callback,
       permissions: ["create"],
-      data: withPlainTextFields(payload),
+      data: addPlainTextFields(payload),
       validator: createCharacterSchema.parse,
       query: ({ data }) => prisma.character.create({ data })
     })
@@ -57,7 +51,7 @@ export function characterHandlers(_io, socket) {
       callback,
       permissions: ["update"],
       id,
-      data: withPlainTextFields(payload),
+      data: addPlainTextFields(payload),
       validator: updateCharacterSchema.parse,
       query: ({ id, data }) => prisma.character.update({ where: { id }, data })
     })
@@ -79,7 +73,8 @@ export function characterHandlers(_io, socket) {
     await characterHandler({
       callback,
 
-      query: () => Promise.all(_map(columns, (column) => fetchColumnOptions(column))),
+      query: () =>
+        Promise.all(_map(columns, (column) => fetchColumnOptions(column))),
 
       mutator: (rawResult) =>
         _zipObject(
@@ -90,6 +85,33 @@ export function characterHandlers(_io, socket) {
   }
 
   async function characterHandler(options) {
-    return await executeQuery({ ...characterHandlerOptions, ...options })
+    const defaultOptions = {
+      user: socket.data?.user,
+      resource: "character",
+      idValidator: characterSchema.shape.id.parse
+    }
+
+    function typenameMutator(rawResult) {
+      if (_isPlainObject(rawResult) && _has(rawResult, "id")) {
+        _set(rawResult, "__typename", "character")
+      } else if (_isArray(rawResult)) {
+        _forEach(rawResult, (entry) =>
+          _set(entry, "__typename", "character")
+        )
+      }
+
+      return rawResult
+    }
+
+    let mutator
+
+    if (_has(options, "mutator")) {
+      mutator = _flow([options.mutator, typenameMutator])
+      _unset(options, "mutator")
+    } else {
+      mutator = typenameMutator
+    }
+
+    return await executeQuery({ ...defaultOptions, ...options, mutator })
   }
 }