A 想用 apollo-federation 中的帖子扩展评论

问题描述 投票:0回答:0

我目前有一个

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 来解决这个问题,但我不知道该怎么做。

apollo apollo-server apollo-federation
© www.soinside.com 2019 - 2024. All rights reserved.