lastMessage in room working

This commit is contained in:
Moriz Wahl 2023-07-14 11:52:51 +02:00
parent 5376e171bd
commit 1d92b40f50
6 changed files with 57 additions and 14 deletions

View File

@ -19,6 +19,18 @@ export const roomQuery = () => {
roomId
roomName
lastMessageAt
lastMessage {
_id
id
content
senderId
username
avatar
date
saved
distributed
seen
}
users {
_id
id

View File

@ -0,0 +1,22 @@
const roomProperties = async (resolve, root, args, context, info) => {
const resolved = await resolve(root, args, context, info)
if (resolved) {
resolved.forEach((room) => {
if (room.users) {
room.users.forEach((user) => {
user._id = user.id
})
}
if (room.lastMessage) {
room.lastMessage._id = room.lastMessage.id
}
})
}
return resolved
}
export default {
Query: {
Room: roomProperties,
},
}

View File

@ -14,6 +14,7 @@ import login from './login/loginMiddleware'
import sentry from './sentryMiddleware'
import languages from './languages/languages'
import userInteractions from './userInteractions'
import chatMiddleware from './chatMiddleware'
export default (schema) => {
const middlewares = {
@ -31,6 +32,7 @@ export default (schema) => {
orderBy,
languages,
userInteractions,
chatMiddleware,
}
let order = [
@ -49,6 +51,7 @@ export default (schema) => {
'softDelete',
'includedFields',
'orderBy',
'chatMiddleware',
]
// add permisions middleware at the first position (unless we're seeding)

View File

@ -22,6 +22,9 @@ beforeAll(async () => {
driver,
neode,
user: authenticatedUser,
cypherParams: {
currentUserId: authenticatedUser ? authenticatedUser.id : null,
},
}
},
})
@ -132,16 +135,25 @@ describe('Message', () => {
describe('room is updated as well', () => {
it('has last message set', async () => {
await expect(query({ query: roomQuery() })).resolves.toMatchObject({
const result = await query({ query: roomQuery() })
await expect(result).toMatchObject({
errors: undefined,
data: {
Room: [
expect.objectContaining({
lastMessageAt: expect.any(String),
lastMessage: expect.objectContaining({
_id: result.data.Room[0].lastMessage.id,
id: expect.any(String),
content: 'Some nice message to other chatting user',
})
senderId: 'chatting-user',
username: 'Chatting User',
avatar: expect.any(String),
date: expect.any(String),
saved: true,
distributed: false,
seen: false,
}),
}),
],
},

View File

@ -8,17 +8,7 @@ export default {
params.filter.users_some = {
id: context.user.id,
}
const resolved = await neo4jgraphql(object, params, context, resolveInfo)
if (resolved) {
resolved.forEach((room) => {
if (room.users) {
room.users.forEach((user) => {
user._id = user.id
})
}
})
}
return resolved
return neo4jgraphql(object, params, context, resolveInfo)
},
},
Mutation: {

View File

@ -18,7 +18,11 @@ type Room {
lastMessageAt: String
lastMessage: Message @cypher(statement: "MATCH (this)<-[:INSIDE]-(message:Message) RETURN message ORDER BY message.createdAt DESC LIMIT 1")
lastMessage: Message @cypher(statement: """
MATCH (this)<-[:INSIDE]-(message:Message)
WITH message ORDER BY message.createdAt DESC LIMIT 1
RETURN message
""")
}
type Mutation {