Дизайн 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!
...
}