From ced4996f4769bae5821e70b42a7dcadf4cfa6fc5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 17 Jul 2023 14:55:57 +0200 Subject: [PATCH] implement chatMessageAdded subscription --- backend/src/schema/resolvers/messages.ts | 18 +++++++++++++- backend/src/schema/types/type/Message.gql | 4 ++++ backend/src/server.ts | 2 +- webapp/components/Chat/Chat.vue | 29 ++++++++++++++++++++++- webapp/graphql/Messages.js | 26 ++++++++++++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts index ececd65a6..f363f9a44 100644 --- a/backend/src/schema/resolvers/messages.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -1,9 +1,21 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import Resolver from './helpers/Resolver' import RoomResolver from './rooms' -import { pubsub, ROOM_COUNT_UPDATED } from '../../server' +import { pubsub, ROOM_COUNT_UPDATED, CHAT_MESSAGE_ADDED } from '../../server' +import { withFilter } from 'graphql-subscriptions' export default { + Subscription: { + chatMessageAdded: { + subscribe: withFilter( + () => pubsub.asyncIterator(CHAT_MESSAGE_ADDED), + (payload, variables) => { + console.log('chatMessageAdded', payload, variables) + return true // payload.user.id === variables.userId + }, + ), + }, + }, Query: { Message: async (object, params, context, resolveInfo) => { const { roomId } = params @@ -91,6 +103,10 @@ export default { // send subscriptions await pubsub.publish(ROOM_COUNT_UPDATED, { roomCountUpdated, user: message.otherUser }) + await pubsub.publish(CHAT_MESSAGE_ADDED, { + chatMessageAdded: message, + user: message.otherUser, + }) return message }) diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql index 671c5523a..e15a27d91 100644 --- a/backend/src/schema/types/type/Message.gql +++ b/backend/src/schema/types/type/Message.gql @@ -45,3 +45,7 @@ type Query { orderBy: [_MessageOrdering] ): [Message] } + +type Subscription { + chatMessageAdded(userId: ID!): Message +} diff --git a/backend/src/server.ts b/backend/src/server.ts index feceeb9eb..0522f5fc8 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -14,7 +14,7 @@ import bodyParser from 'body-parser' import { graphqlUploadExpress } from 'graphql-upload' export const NOTIFICATION_ADDED = 'NOTIFICATION_ADDED' -// export const CHAT_MESSAGE_ADDED = 'CHAT_MESSAGE_ADDED' +export const CHAT_MESSAGE_ADDED = 'CHAT_MESSAGE_ADDED' export const ROOM_COUNT_UPDATED = 'ROOM_COUNT_UPDATED' const { REDIS_DOMAIN, REDIS_PORT, REDIS_PASSWORD } = CONFIG let prodPubsub, devPubsub diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue index dd39e7bcd..1e4636e8b 100644 --- a/webapp/components/Chat/Chat.vue +++ b/webapp/components/Chat/Chat.vue @@ -61,7 +61,7 @@