From 2fe93892a1c1a52ae224e04c1fbb391b15c0bc4a Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 14 Jul 2023 12:21:40 +0200 Subject: [PATCH] full room object for create room mutation --- backend/src/graphql/rooms.ts | 10 +++++++ backend/src/middleware/chatMiddleware.ts | 33 +++++++++++++++------- backend/src/schema/resolvers/rooms.spec.ts | 19 +++++++++++++ backend/src/schema/resolvers/rooms.ts | 8 +++++- 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/backend/src/graphql/rooms.ts b/backend/src/graphql/rooms.ts index 28626071c..e48ffe943 100644 --- a/backend/src/graphql/rooms.ts +++ b/backend/src/graphql/rooms.ts @@ -6,6 +6,16 @@ export const createRoomMutation = () => { CreateRoom(userId: $userId) { id roomId + roomName + lastMessageAt + users { + _id + id + name + avatar { + url + } + } } } ` diff --git a/backend/src/middleware/chatMiddleware.ts b/backend/src/middleware/chatMiddleware.ts index 38b299450..5b0e4d7e2 100644 --- a/backend/src/middleware/chatMiddleware.ts +++ b/backend/src/middleware/chatMiddleware.ts @@ -1,16 +1,26 @@ +import { isArray } from 'lodash' + +const setRoomProps = (room) => { + if (room.users) { + room.users.forEach((user) => { + user._id = user.id + }) + } + if (room.lastMessage) { + room.lastMessage._id = room.lastMessage.id + } +} + 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 - } - }) + if (isArray(resolved)) { + resolved.forEach((room) => { + setRoomProps(room) + }) + } else { + setRoomProps(resolved) + } } return resolved } @@ -19,4 +29,7 @@ export default { Query: { Room: roomProperties, }, + Mutation: { + CreateRoom: roomProperties, + }, } diff --git a/backend/src/schema/resolvers/rooms.spec.ts b/backend/src/schema/resolvers/rooms.spec.ts index d247c42b4..daed6815e 100644 --- a/backend/src/schema/resolvers/rooms.spec.ts +++ b/backend/src/schema/resolvers/rooms.spec.ts @@ -125,6 +125,25 @@ describe('Room', () => { CreateRoom: { id: expect.any(String), roomId: result.data.CreateRoom.id, + roomName: 'Other Chatting User', + users: expect.arrayContaining([ + { + _id: 'chatting-user', + id: 'chatting-user', + name: 'Chatting User', + avatar: { + url: expect.any(String), + }, + }, + { + _id: 'other-chatting-user', + id: 'other-chatting-user', + name: 'Other Chatting User', + avatar: { + url: expect.any(String), + }, + }, + ]), }, }, }) diff --git a/backend/src/schema/resolvers/rooms.ts b/backend/src/schema/resolvers/rooms.ts index d1e14aaba..885688643 100644 --- a/backend/src/schema/resolvers/rooms.ts +++ b/backend/src/schema/resolvers/rooms.ts @@ -29,7 +29,13 @@ export default { ON CREATE SET room.createdAt = toString(datetime()), room.id = apoc.create.uuid() - RETURN room { .* } + WITH room, user, currentUser, + user.name AS roomName + RETURN room { + .*, + users: [properties(currentUser), properties(user)], + roomName: roomName + } ` const createRommTxResponse = await transaction.run(createRoomCypher, { userId,