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() };
}