Не работает subscription в nestjs/graphql
не могу подписаться на событие в библиотеке graphql-subscriptions через PubSub, чтобы работало обновление. Если кто-то имеет догадки, как решить проблему, буду благодарен.
Internal error occurred during message handling. Please check your implementation. Error: Subscription field must return Async Iterable. Received: { pubsub: { ee: [Object], subscriptions: {}, subIdCounter: 0 }, pullQueue: [], pushQueue: [], running: true, allSubscribed: null, eventsArray: ["movieRatingUpdated"] }.
movie.resolver.ts
constructor(
private movieRateService: MovieRateService,
private prisma: PrismaService,
@Inject('PUB_SUB') private pubSub: PubSubEngine,
) {}
@UseGuards(AuthGuard)
@Mutation(() => MovieEntity, { description: 'Rate movie' })
async rateMovie(
@Args('id', { nullable: false }, CheckMovieExistPipe)
movieId: number,
@Args('rating', { nullable: false })
value: number,
@User('id')
user: User,
) {
const movie = await this.movieRateService.rateMovie(
movieId,
user.id,
value,
);
await this.pubSub.publish('movieRatingUpdated', {
movieRatingUpdated: movie,
});
return movie;
}
@Subscription(() => TestEntity, {
name: 'movieRatingUpdated',
resolve: (payload) => {
console.log('Resolving payload:', payload);
payload.movieRatingUpdated;
},
})
movieRatingUpdated() {
return this.pubSub.asyncIterableIterator('movieRatingUpdated');
}
movie.module.ts
export const pubSub = new PubSub();
@Module({
controllers: [MovieController],
providers: [
MovieRateService,
MovieResolver,
{
provide: 'PUB_SUB',
useValue: pubSub,
},
],
imports: [PrismaModule, CacheModule.register()],
exports: ['PUB_SUB'],
})
export class MovieModule {}
app.module.ts
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: path.join(process.cwd(), 'src/schema.gql'),
subscriptions: {
'graphql-ws': {
path: '/graphql',
},
},
include: [MovieModule],
playground: true,
introspection: true,
}),