add last message at, use cypher statements for roomName and avatar

This commit is contained in:
Moriz Wahl 2023-07-13 19:09:17 +02:00
parent d9510b0739
commit 032bca1b64
6 changed files with 26 additions and 8 deletions

View File

@ -18,6 +18,7 @@ export const roomQuery = () => {
id
roomId
roomName
lastMessageAt
users {
_id
id

View File

@ -1,7 +1,7 @@
import { createTestClient } from 'apollo-server-testing'
import Factory, { cleanDatabase } from '../../db/factories'
import { getNeode, getDriver } from '../../db/neo4j'
import { createRoomMutation } from '../../graphql/rooms'
import { createRoomMutation, roomQuery } from '../../graphql/rooms'
import { createMessageMutation, messageQuery, markMessagesAsSeen } from '../../graphql/messages'
import createServer from '../../server'
@ -129,6 +129,21 @@ describe('Message', () => {
},
})
})
describe('room is updated as well', () => {
it('has last message at set', async () => {
await expect(query({ query: roomQuery() })).resolves.toMatchObject({
errors: undefined,
data: {
Room: [
expect.objectContaining({
lastMessageAt: expect.any(String),
}),
],
},
})
})
})
})
describe('user does not chat in room', () => {

View File

@ -68,6 +68,7 @@ export default {
distributed: false,
seen: false
})-[:INSIDE]->(room)
SET room.lastMessageAt = toString(datetime())
RETURN message { .* }
`
const createMessageTxResponse = await transaction.run(createMessageCypher, {

View File

@ -21,6 +21,9 @@ beforeAll(async () => {
driver,
neode,
user: authenticatedUser,
cypherParams: {
currentUserId: authenticatedUser ? authenticatedUser.id : null,
},
}
},
})

View File

@ -12,11 +12,6 @@ export default {
if (resolved) {
resolved.forEach((room) => {
if (room.users) {
// buggy, you must query the username for this to function correctly
room.roomName = room.users.filter((user) => user.id !== context.user.id)[0].name
room.avatar =
room.users.filter((user) => user.id !== context.user.id)[0].avatar?.url ||
'default-avatar'
room.users.forEach((user) => {
user._id = user.id
})
@ -68,6 +63,7 @@ export default {
},
Room: {
...Resolver('Room', {
undefinedToNull: ['lastMessageAt'],
hasMany: {
users: '<-[:CHATS_IN]-(related:User)',
},

View File

@ -13,8 +13,10 @@ type Room {
users: [User]! @relation(name: "CHATS_IN", direction: "IN")
roomId: String! @cypher(statement: "RETURN this.id")
roomName: String! ## @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user[0].name")
avatar: String! ## @cypher match not own user in users array
roomName: String! @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user.name")
avatar: String! @cypher(statement: "MATCH (this)<-[:CHATS_IN]-(user:User) WHERE NOT user.id = $cypherParams.currentUserId RETURN user.avatar.url")
lastMessageAt: String
}
type Mutation {