Instagram-clone#7-Subscription

Seo·2020년 5월 31일
0

InastagramClone

목록 보기
7/15

📌 Subscription

graphql에는 query, mutation과 더불어 subscription 기능을 제공한다.
subscription은 특정 이벤트(create, delete, update...)가 발생했을 때 알람을 주는 기능이다. 전형적인 요청-응답 방식이 아닌 푸쉬 방식이다.

https://velog.io/@cadenzah/graphql-node-08-subscription

subscription서버를 구현하기는 어렵다. server를 일단 분리해야 하기 때문이다.
prisma에서는 subscription 기능을 자체적으로 제공하며, 필터링 방법도 매우 좋기 때문에 사용하기에 편리하다.

📨 Message Subscription

나에게 보내진 Message에 한해서 알람을 받는 기능을 만든다.

type Subscription {
  newMessage(roomId: String!): Message
}
Subscription: {
  newMessage: {
    subscribe: (_, args) => {
      const { roomId } = args;
      return prisma.$subscribe
        .message({
        AND: [
          { mutation_in: "CREATED" },
          {
            node: { room: { id: roomId } },
          },
        ],
      }).node();
    },
    resolve: (payload) => payload,
  },
},

subscription은 자바스크립트 객체의 subscribe 필드의 값으로서 제공됩니다.
(subscribe, resolve..)

  • subscribe 필드: prisma.$subscribe.message
    -mutation: "CREATED", "DELETED", "UPDATED" 중 조건에 맞게 사용
    -node: 여기서 node는 message 타입에 대한 node이다.
    -node 조건: 입력된 roomId와 동일한 Id를 가진 node를 조건으로 건다.
    -.node() : 그래서 Message 타입을 받기 위해서는 resolve payload를 통해 node값을 반환시켜주어야 한다.
  • resolve 필드: AsyncIterator가 발생시키는 데이터로부터 실제로 데이터를 반환하는 resolve 필드를 별도로 제공해야 한다.
profile
개발관심자

0개의 댓글