graphile / graphile/graphile.github.io

Example of changing from simple subscriptions to (equivalent) custom subscriptions

オープン
#269 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
SCSS
スター
27
フォーク
126
PR マージ指標
30日以内にマージされた PR はありません

説明

```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;
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

ファイル、テスト、またはドキュメントのエントリポイントは指定されていません。まず subscriptions のドキュメント領域を見つけ、この例をどこに配置すべきか判断してください。この Issue に記載された同等の動作を持つ、シンプルな subscription からカスタム subscription への例が追加されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
graphql, javascript
領域
documentation
issue の種類
ドキュメント
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
28/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。