[Prisma] Subscription

Review/백엔드 - 인스타그램 클론

[Prisma] Subscription

조커린 2020. 2. 19. 04:19

메시지를 주고 받는 기능을 만들었으니 이제 받는 기능을 만든다~

프리즈마의 Subscription란 기능을 이용하면 서버가 계속 리스닝하고 있다가 새로운 변화를 감지해줌

 

Id 에게 ( 로그인 된 대상) 보내진 message를 얻는 것을 할 것.
메세지의 id 는 roomid 이고,
우리에게 보내진 message 또한 subscribe 할 것이다.  

 

프리즈마 서버에서 Subscription을 만들어 보기로 한다

 

 

mutation_in은 어떤 mutation을 subscribe할 지 정하는 것인데
새로운 message를 하고 싶으면 create 를 하면 된다
delete,updated 등등.. 할 수 있다. 

 

이번엔 CREATED를 사용한다.

 

프리즈마 서버에서 테스트하기위해 기존의 룸 아이디를 가져와 테스트를 해보기로 함

 

 

서버에서 listening하고 있는 걸 확인

 

메시지를 보내보면

바로 이렇게 내용이 뜸

많이 보낼수록 노드가 쌓임

 

이걸 이제 코드로 구현해보기로 한다.

 

newMessage.graphql

1
2
3
type Subscription {
    newMessage(roomId : String!):Message
}
cs

 

newMessage.js

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { prisma } from "../../../../generated/prisma-client";
 
export default {
    Subscription:{
        newMessage:{
            subscribe:(_, args) => {
                const { roomId } =args ;
                return prisma.$subscribe.message({
                    AND:[
                        { mutation_in :"CREATED" },
                        {
                            node : {
                                room:{ id:roomId}
                            }
                        }
                    ]
                }).node();
               
            },
            resolve: payload => payload   
        }
    }
}
cs