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 を操作するフィールドとスキーマを操作するフィールドが示されていませんでした。
私の質問は、それが推奨されているのか、何か不足しているのかということです。