35.Subscription(3)_pubsub_publish

김종민·2022년 4월 29일
0

insta-backend

목록 보기
36/37

첫번째로 subscription의 server를 만들었고, 두번째로 subscription의
subscribe부분을 만들었고, 세번쨰로 publish부분을 만들어 봄
참고로 publish는 sendMessage.resolvers.js에서 구현함.

1. 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,
        }
      }
    ),
  },
}
profile
코딩하는초딩쌤

0개의 댓글