diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts index b0defe760..49756d4d1 100644 --- a/backend/src/schema/resolvers/messages.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -1,19 +1,9 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import Resolver from './helpers/Resolver' -import { withFilter } from 'graphql-subscriptions' -import { pubsub, CHAT_MESSAGE_ADDED } from '../../server' +import RoomResolver from './rooms' +import { pubsub, ROOM_COUNT_UPDATED } from '../../server' export default { - Subscription: { - chatMessageAdded: { - subscribe: withFilter( - () => pubsub.asyncIterator(CHAT_MESSAGE_ADDED), - (payload, variables) => { - return payload.chatMessageAdded.senderId !== variables.userId - }, - ), - }, - }, Query: { Message: async (object, params, context, resolveInfo) => { const { roomId } = params @@ -91,12 +81,16 @@ export default { roomId, content, }) + const [message] = await createMessageTxResponse.records.map((record) => record.get('message'), ) + // TODO change user in context - mark message as seen + const roomCountUpdated = await RoomResolver.Query.UnreadRooms(null, null, context, null) + // send subscriptions - await pubsub.publish(CHAT_MESSAGE_ADDED, { chatMessageAdded: message }) + await pubsub.publish(ROOM_COUNT_UPDATED, { roomCountUpdated }) return message }) diff --git a/backend/src/schema/resolvers/rooms.ts b/backend/src/schema/resolvers/rooms.ts index cbf5bcd63..c5ab92d87 100644 --- a/backend/src/schema/resolvers/rooms.ts +++ b/backend/src/schema/resolvers/rooms.ts @@ -1,7 +1,20 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import Resolver from './helpers/Resolver' +import { pubsub, ROOM_COUNT_UPDATED } from '../../server' +import { withFilter } from 'graphql-subscriptions' export default { + Subscription: { + roomCountUpdated: { + subscribe: withFilter( + () => pubsub.asyncIterator(ROOM_COUNT_UPDATED), + (payload, variables) => { + console.log('sub', payload, variables) + return true // payload.chatMessageAdded.senderId !== variables.userId + }, + ), + }, + }, Query: { Room: async (object, params, context, resolveInfo) => { if (!params.filter) params.filter = {} diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql index e15a27d91..671c5523a 100644 --- a/backend/src/schema/types/type/Message.gql +++ b/backend/src/schema/types/type/Message.gql @@ -45,7 +45,3 @@ type Query { orderBy: [_MessageOrdering] ): [Message] } - -type Subscription { - chatMessageAdded(userId: ID!): Message -} diff --git a/backend/src/schema/types/type/Room.gql b/backend/src/schema/types/type/Room.gql index 80f61c83a..580edcfac 100644 --- a/backend/src/schema/types/type/Room.gql +++ b/backend/src/schema/types/type/Room.gql @@ -35,3 +35,7 @@ type Query { ): [Room] UnreadRooms: Int } + +type Subscription { + roomCountUpdated(userId: ID!): Int +} diff --git a/backend/src/server.ts b/backend/src/server.ts index 8192e44bc..feceeb9eb 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -14,7 +14,8 @@ 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 const options = { diff --git a/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue b/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue index 34368a787..92cb9d25a 100644 --- a/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue +++ b/webapp/components/ChatNotificationMenu/ChatNotificationMenu.vue @@ -16,8 +16,7 @@