Как бы я назначил гостей на приеме пищи на одного посетителя на каждый стол на конференции в схеме GraphQL? - PullRequest
0 голосов
/ 10 января 2020

Я размышляю над перестройкой приложения для рассадки еды. Я использую GraphQL для запроса посетителей и их гостей за столом на обеденном мероприятии (назначенное место). Предоставленная модель данных выглядит примерно так:

meal event 1
  table A
    attendee 1
      guest 1
  ...
meal event 2
  table L
    attendee 1 (no guest this time)
  ...

Участник может посетить несколько мероприятий, например, на многодневной конференции. Этот участник может иметь гостя (ей) на мероприятии (ях) еды. Это может быть еще одна запись участника (два билета на питание, та же информация), отмеченная как гость, однако как участник и их гость (ы) должны сидеть за одним столом (не нужно, чтобы супруг (-а) находился на другой стороне комнаты для пример). У участников обычно будет один и тот же гость (и) на нескольких мероприятиях, но не всегда из-за стоимости или противоречивых гостевых обязательств или желания чередовать гостей за едой и т. Д. c.

Как бы я смоделировал это в Схема GraphQL? В базе данных я бы использовал таблицы соединений. Однако для клиентских запросов GraphQL и типов схем мне нужно смоделировать это немного иначе (я думаю?). Вот что у меня есть на данный момент:

type Attendee {
  name: String
  ** Can't add guests here as this may change per event
}

type Event {
  name: String
  tables: [Table]
}

type Table {
  name: String
  attendees: [Attendee]
  ** How do I "tree" in guests here for attendees for this table?
}

На этом этапе мне нужен тип соединения, чтобы получать гостей на одного посетителя за стол за событие?

1 Ответ

1 голос
/ 10 января 2020

При написании нашего серверного кода мы обычно инкапсулируем нашу бизнес-логику c внутри моделей домена, таких как Event, Table, Attendee или Guest. Однако эти доменные модели не должны иметь строго однозначного сопоставления с таблицами, которые мы используем для сохранения своих данных - например, отдельная модель может объединять данные из нескольких таблиц.

Точно так же ваши типы GraphQL не должны иметь однозначное сопоставление с вашими моделями доменов. Часто может иметь смысл представлять одну и ту же модель домена в виде нескольких типов. Например, мы можем сделать что-то вроде:

type EventAttendee {
  id: ID!
  name: String!
}

type TableAttendee {
  id: ID!
  name: String!
  guests: [Guest!]!
}

type Table {
  id: ID!
  attendees: [TableAttendee!]!
}

type Event {
  id: ID!
  name: String!
  attendees: [EventAttendee!]!
  tables: [Table!]!
}

Ваша схема эффективно представляет несколько графиков или представлений ваших данных. В зависимости от того, где на этом графике заканчивается ваша доменная модель, следует определить, какие поля она представляет как тип - в некоторых контекстах показ определенных свойств или отношений имеет смысл, в других - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...