Subscription 01

2021-06-26
Subscriptions
Subscriptions are long-lasting GraphQL read operations that can update their result whenever a particular server-side event occurs

Type-graphql로 간단한 subscriptions 예제를 만들어 보았다.

@Mutation(() => Boolean)
@UseMiddleware(isAuth)
async createMessage(
    @Arg("input") input: MessageInput,
    @Ctx() { req }: MyContext,
    @PubSub() pubsub: PubSubEngine
): Promise<Boolean> {
    try {
        const channel = await Channelmodel.findOne({
            name: input.channelName,
        });
        channel.messages.push({ text: input.text, user: req.session.name });
        channel.save();

        // here we can trigger subscriptions topics
        const payload: MessagePayload = {
            text: input.text,
            user: req.session.name,
        };
        await pubsub.publish("MESSAGES", payload);
        return true;
    } catch (err) {
        console.log(err);
        return false;
    }
}

@Subscription({ topics: ["MESSAGES"], })
newMessage(@Root() { text, user }: MessagePayload): Message {
    return { text, user, date: new Date() };
}

1