Дизайн GraphQL: Могут ли края иметь собственные выступы (связи, отношения)?

Допустим, пользователь создает заказ с продуктами в интернет-магазине, но у заказанных продуктов есть свои опции, которые можно выбрать в процессе заказа. Таким образом, пользователь должен выбрать продукты с некоторыми вариантами покупки. В graphql есть три типа:Product, ProductOption а также Order.

type Product implements Node {
   id: ID!
   name: String!
   options: [ProductOptionsConnection!]!
}

type ProductOption implements Node {
   id: ID!
   name: String!
   product: Product!
}

type ProductOptionsConnection {
  edges: [ProductOptionEdge!]!
  totalCount: Int!
  ...
}

type ProductOptionEdge {
  node: ProductOption!
}

type Order implements Node {
   id: ID!
   createdAt: DateTime!
   products: OrderProductsConnection!
}

Возникает вопрос: как лучше всего строить отношения между заказом, товарами и выбранными опциями?

1:


type OrderProductsConnection {
   edges: [OrderProductEdge!]!
   totalCount: Int!
   ...
}

type OrderProductEdge {
   node: Product!
   selectedOptions: [OrderProductOptionsConnection!]!
   addedAt: DateTime
}

type OrderProductOptionsConnection {
   edges: [OrderProductOptionEdge!]!
   totalCount: Int!
   ...
}

type OrderProductOptionEdge {
   node: ProductOption
}

2:

type OrderProductsConnection {
   edges: [OrderProductEdge!]!
   totalCount: Int!
   ...
}

type OrderProductEdge {
  node: OrderProduct!
}

type OrderProduct {  // implements Node??
  product: Product!
  selectedOptions: OrderProductOptionsConnection!
  addedAt: DateTime!
}

type OrderProductOptionsConnection {
  edges: [OrderProductOptionEdge]!
}

type OrderProductOptionEdge {
   node: OrderProductOption!
}

type OrderProductOption { // implements Node??
   option: ProductOption!
   ...
}

0 ответов

Другие вопросы по тегам