Я хотел бы найти, отфильтровать, упорядочить результат в памяти, который агрегируется из данных локальной базы данных и данных из внешнего API.
Это мой пример преобразователя.
const resolver = {
Query: {
allDevices: (_, args: QueryArgs, context: CustomContext) =>
readAllDevices() // from local database
.then(searchFilterOrderAndPaginate(["name"], args))
// additionalDataFromOtherMicroservice is not yet resolved
// -> no search possible over all properties
},
Mutation: {},
Device: {
additionalDataFromOtherMicroservice: () => Promise.resolve("" + Math.random())
// simulates an http request to another microservice api
}
};
Это мой пример схемы.
const schema = gql`
type Device {
id: ID
number: ID
name: String
additionalDataFromOtherMicroservice: String
}
type Query {
allDevices(
search: String
filterParams: [FilterParam]
orderParams: [OrderParam]
pagination: Pagination
): [Device]
`
Проблема в том, что grapqhl разрешает поля как каскад.У меня нет доступа к корневому запросу, когда преобразователь поля завершен.
Я пытался https://www.npmjs.com/package/graphql-middleware, но не срабатывает после разрешения всех подполей.
Как можно использовать мощный механизм разрешения полей в Graphql, вкл.кэширование и т. д. И доступ к результату ПОСЛЕ того, как все поля были разрешены?