room count subscription

This commit is contained in:
Ulf Gebhardt 2023-07-17 12:41:06 +02:00
parent fb45ac107a
commit 3e60ab6854
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9
8 changed files with 37 additions and 36 deletions

View File

@ -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
})

View File

@ -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 = {}

View File

@ -45,7 +45,3 @@ type Query {
orderBy: [_MessageOrdering]
): [Message]
}
type Subscription {
chatMessageAdded(userId: ID!): Message
}

View File

@ -35,3 +35,7 @@ type Query {
): [Room]
UnreadRooms: Int
}
type Subscription {
roomCountUpdated(userId: ID!): Int
}

View File

@ -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 = {

View File

@ -16,8 +16,7 @@
<script>
import { mapGetters } from 'vuex'
import CounterIcon from '~/components/_new/generic/CounterIcon/CounterIcon'
import { unreadRoomsQuery } from '~/graphql/Rooms'
import { chatMessageAdded } from '~/graphql/Messages'
import { unreadRoomsQuery, roomCountUpdated } from '~/graphql/Rooms'
export default {
name: 'ChatNotificationMenu',
@ -43,15 +42,14 @@ export default {
this.count = UnreadRooms
},
subscribeToMore: {
document: chatMessageAdded(),
document: roomCountUpdated(),
variables() {
return {
userId: this.user.id,
}
},
updateQuery: (previousResult, { subscriptionData }) => {
// TODO emit chat reload
return { UnreadRooms: previousResult.UnreadRooms + 1}
return { UnreadRooms: subscriptionData.data.roomCountUpdated }
},
},
},

View File

@ -33,16 +33,3 @@ export const createMessageMutation = () => {
}
`
}
export const chatMessageAdded = () => {
return gql`
subscription chatMessageAdded($userId: ID!) {
chatMessageAdded(userId: $userId) {
id
room {
id
}
}
}
`
}

View File

@ -35,3 +35,11 @@ export const unreadRoomsQuery = () => {
}
`
}
export const roomCountUpdated = () => {
return gql`
subscription roomCountUpdated($userId: ID!) {
roomCountUpdated(userId: $userId)
}
`
}