1

NestJS + Prisma + Apollo フェデレーションを使用しています。

マイクロサービス A ではユーザーの定義であり、マイクロサービス B では投稿が定義されています。関係は 1 - N で、ユーザーは N 個の投稿を持つことができます。

Prisma では、userId が uuid であるため、Post のデータモデルはユーザーの文字列で定義されます。

type Post {
  id: Int! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt
  user: String!
}

生成されたスキーマ ( https://graphql-code-generator.comを使用) では、Post には User 型の属性があり、この User 型は id と投稿の配列を拡張します。

type Post @key(fields: "id") {
  id: Int!
  createdAt: DateTime!
  updatedAt: DateTime!
  user: User!
}

extend type User @key(fields: "id") {
  id: ID! @external
  posts: [Post]
}

apollo フェデレーションでは、クエリが両方のマイクロサービス間をリンクしようとする場合を除いて、すべてが期待どおりに機能します。

プレイグラウンドで、サブフィールドを設定せずにユーザーを使用して投稿をクエリしようとすると、スキーマが壊れて、ユーザーのサブフィールドを設定する必要があると表示されます。文字列です。

これを正しく機能させる唯一の方法は、Prisma で文字列型の userId フィールドを設定し、ユーザー型のユーザーと呼ばれるスキーマの別のフィールドを設定することでした。しかし、すべての例で、db を操作するフィールドとスキーマを操作するフィールドが示されていませんでした。

私の質問は、それが推奨されているのか、何か不足しているのかということです。

4

1 に答える 1