У меня есть эта схема, и я внедряю ее в apollo-graphql, и у меня возникают проблемы при написании распознавателей для типов с подтипами, которые ссылаются друг на друга следующим образом.
Моя схема
type Period {
start: DateTime!
end: DateTime!
...
equipment: [Equipment]
events: [Event]
}
type Equipment {
id: ID!
name: String!
model: Model!
loads: [Load]
events: [Event] <<<<
}
type Event {
id: ID!
start: DateTime!
end: DateTime!
duration: Duration!
status: Status!
equipment: Equipment! <<<<
}
Это обычно приводит к запросу, например
{
period (start:"2019-12-01 07:00:00" end:"2019-12-01 19:00:00")
{
equipment {
id
events {
id
status
equipment {
id
events {
....
}
}
}
}
}
. С точки зрения возвращаемых объектов это должно быть:
Period : is bound by a start and end.
Period.equipment : is all equipment used during that period.
period.equipment.events : would be all events in that period that relate to a this equipment
period.equipment.events.equipment : would be equipment that relate to these events.
... so on and so forth.
По сути, это приводит к серии фильтрации, которая необходимо передать в зависимости от периода, оборудования и событий.
Кажется, что это имеет смысл для бизнес-сферы, но у меня возникают проблемы при написании распознавателей, которые передают эти параметры фильтра.
One Подход, который я могу придумать, состоит в том, чтобы ... обработчик запросов для period
вернуть equipmentId
и eventId
и иметь средства распознавания типов для equipment
и `events
export const resolvers = {
Query: {
...
period: (_, { start, end }, { dataSources }) =>
dataSources.Data.getPeriod({
start: start,
end: end
}),
, а затем иметь тип распознаватели для Equipment
и Events
Equipment: {
...
events: (equipment, { }, { dataSources }) => {
// How can I get start,end values here?
// code to return events
},
но как тогда передать переменные фильтра start
, end
et c в эти типы?
Если я попытаюсь разрешить period.equiment
как полевой преобразователь, то мне нужно удовлетворить n бесконечный уровень рекурсии как period.equipment.events.equipment.events ....
верно?
Любая помощь или совет будут высоко оценены. Спасибо.