첫번째로 subscription의 server를 만들었고, 두번째로 subscription의
subscribe부분을 만들었고, 세번쨰로 publish부분을 만들어 봄
참고로 publish는 sendMessage.resolvers.js에서 구현함.
import prisma from '../../client'
import { NEW_MESSAGE } from '../../constants'
import pubsub from '../../pubsub'
import { protectedResolver } from '../../users/users.util'
export default {
Mutation: {
sendMessage: protectedResolver(
async (_, { payload, roomId, userId }, { loggedInUser }) => {
let room = null
if (userId) {
const user = await prisma.user.findUnique({
where: { id: userId },
select: { id: true },
})
if (!user) {
return {
ok: false,
error: 'This User does not exist',
}
}
room = await prisma.room.create({
data: {
users: { connect: [{ id: userId }, { id: loggedInUser.id }] },
},
})
} else if (roomId) {
room = await prisma.room.findUnique({
where: { id: roomId },
select: { id: true },
})
if (!room) {
return {
ok: false,
error: 'Room not found',
}
}
}
const message = await prisma.message.create({
///publish할 message를 만들어줌.
data: {
payload,
room: {
connect: {
id: room.id,
},
},
user: {
connect: {
id: loggedInUser.id,
},
},
},
})
pubsub.publish(NEW_MESSAGE, { roomUpdates: message })
//message를 만들고 난 후, message를 publish함!!
//매우 중요함!!!!!
return {
ok: true,
}
}
),
},
}