Я использую Nest JS + Prisma + Apollo Federation.
На микросервисе A есть определение пользователя, на микросервисе B определены посты. Отношение 1 - N, пользователь может иметь N сообщений.
В Prisma модель данных Post определяется со строкой для пользователя, поскольку userId - это uuid.
type Post {
id: Int! @id
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
user: String!
}
В сгенерированная схема (с https://graphql-code-generator.com), Post имеет атрибут типа User, и этот тип User расширяет идентификатор и массив сообщений:
type Post @key(fields: "id") {
id: Int!
createdAt: DateTime!
updatedAt: DateTime!
user: User!
}
extend type User @key(fields: "id") {
id: ID! @external
posts: [Post]
}
В федерации Аполлона все работает, как и ожидалось, за исключением случаев, когда выполняется запрос, пытающийся установить связь между обоими микросервисами.
На игровой площадке, если вы пытаетесь запросить посты со своим пользователем, не задавая подполя, он нарушает схему и говорит, что вы должны установить Подполя пользователя, и если вы установите подполя, graphql ответит сообщением, что вы не можете использовать подполя, потому что его тип - String.
Единственный способ, которым я мог сделать эту работу правильно, это установить в Prisma поле userId введите строку и установите другое поле в схеме с именем пользователя типа User. Но во всех примерах не было показано поле для работы с БД и поле для работы со схемой.
У меня вопрос: рекомендуется ли это или я что-то упустил?