graphile / graphile/graphile.github.io
Example of changing from simple subscriptions to (equivalent) custom subscriptions
- 主要言語
- 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