graphile / graphile/graphile.github.io
Example of changing from simple subscriptions to (equivalent) custom subscriptions
- Lenguaje dominante
- SCSS
- Estrellas
- 27
- Forks
- 126
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
```js
// MySubscriptionPlugin.js
const base64 = (str) => Buffer.from(String(str)).toString("base64");
const nodeIdFromDbNode = (dbNode) => base64(JSON.stringify(dbNode));
const { makeExtendSchemaPlugin, gql, embed } = require("graphile-utils");
const listenTopic = async (args, _context, _resolveInfo) => {
const authCheckPassed = true; // TODO: implement your auth checks here
if (authCheckPassed) {
return `postgraphile:${args.topic}`;
} else {
throw new Error("You're not allowed to subscribe to this topic");
}
};
function filterFn(payload, variables, context, info) {
return true;
}
const MyPlugin = makeExtendSchemaPlugin((build) => {
const { extend, newWithHooks, pgSql: sql, $$isQuery, resolveNode } = build;
return {
typeDefs: gql`
type ListenPayload {
query: Query
relatedNode: Node
relatedNodeId: ID
}
extend type Subscription {
"""
Listen for any changes within the Platform with filter functionality
"""
listen(topic: String!, filter: String): ListenPayload @pgSubscription(
topic: ${embed(listenTopic)}
)
}
`,
resolvers: {
Subscription: { listen: { resolve: (event) => event } },
ListenPayload: {
query: () => $$isQuery,
relatedNodeId: (event) => nodeIdFromDbNode(event.__node__),
async relatedNode(event, _args, resolveContext, resolveInfo) {
const {
getDataFromParsedResolveInfoFragment,
} = resolveInfo.graphile.fieldContext;
return resolveNode(
nodeIdFromDbNode(event.__node__),
build,
{ getDataFromParsedResolveInfoFragment },
{},
resolveContext,
resolveInfo
);
},
},
},
};
});
module.exports = MyPlugin;
```
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
No se indica ningún punto de entrada de archivo, prueba o documentación. Primero localiza el área de documentación de subscriptions y determina dónde corresponde este ejemplo; se considera completado cuando se añade el ejemplo de subscription de simple a personalizada con el comportamiento equivalente descrito en el issue.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- graphql, javascript
- Área
- documentation
- Tipo de issue
- Documentación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 28/100