我目前有一个
post
微服务,我想创建一个通用的 review
微服务,以将其插入到以后需要它的每个微服务(如产品)中。
为此,我尝试了这样的事情
评论微服务
审核实体
import { Directive, Field, GraphQLISODateTime, Int, ObjectType } from '@nestjs/graphql';
@ObjectType()
@Directive('@key(fields: "parentId")')
@Directive('@key(fields: "parentType")')
export class Review {
@Field((type) => Int)
id: number;
@Field((type) => String)
parentType: string;
@Field((type) => Int)
parentId: number;
}
帖子微服务
帖子实体
import { Directive, Field, ID, Int, ObjectType } from '@nestjs/graphql';
import { Review } from 'src/review/review.entity';
import { User } from '../user/user.entity';
@ObjectType()
@Directive('@key(fields: "id")')
export class Post {
@Field((type) => ID)
id: number;
@Field()
title: string;
@Field((type) => [Review])
reviews: Review[];
}
微服务中的评论实体,它从评论微服务扩展评论实体
import { Directive, ObjectType, Field, Int } from '@nestjs/graphql';
import { Post } from '../post/post.entity';
@ObjectType()
@Directive('@key(fields: "parentId")')
@Directive('@key(fields: "parentType")')
export class Review {
@Field((type) => Int)
parentId: number;
@Field((type) => String)
parentType: string;
@Field((type) => [Post])
posts?: Post[];
}
在后解析器中,我把
import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
import { Post } from './post.entity';
import { Review } from 'src/review/review.entity';
@Resolver((of) => Post)
export class PostResolver {
@ResolveField('reviews', () => [Review])
reviews(@Parent() post: Post) {
return { __typename: 'Review', parentType: 'POST', parentId: post.id };
}
}
解决评论
并在评论微服务解析器中:
import { Resolver, ResolveReference } from '@nestjs/graphql';
import { Review } from './review.entity';
import { ReviewService } from './review.service';
@Resolver((of) => Review)
export class ReviewResolver {
constructor(private reviewsService: ReviewService) { }
@ResolveReference()
async resolveReference(reference: { __typename: string; parentId: number, parentType: string }) {
return await this.reviewsService.findByParent(reference.parentId, reference.parentType)
}
}
我的问题是由一对多关系引起的。
Posts->reviews 解析器应该返回一个数组,如 [{ reviewId: ... }, { reviewId: ...}] 但我想发送 parentType 和 parentId 来解决这个问题,但我不知道该怎么做。