Привязка призмы Вложенная фильтрация

Я работаю над платформой заказа еды с Prisma, Prisma-binding и Apollo Server на бэкэнде. Клиент может выбрать ресторан по соседству и добавить одно или несколько блюд в свою корзину. Возможно, когда блюдо из ресторана x уже добавлено, покупатель решит заказать его из другого ресторана, ресторана y. Поэтому мне нужно отфильтровать добавленные блюда при оформлении заказа на основе идентификатора клиента и окончательного выбранного ресторана в бэкэнде, прежде чем создавать заказ и URL-адрес оплаты.

В моей модели данных призмы есть три типа данных: Customer, CartItem и Dish.

type Customer {
    id: ID! @id
    createdAt: DateTime! @createdAt
    updatedAt: DateTime! @updatedAt
    name: String
    email: String
    phone: String
    user: User
    cart: [CartItem]!
    orders: [Order]!
}

type CartItem {
    id: ID! @id
    quantity: Int! @default(value: 1)
    dish: Dish!
    customer: Customer! @relation(link: INLINE)
}

type Dish {
    id: ID! @id
    name: String!
    price: String!
    description: String!
    isAvailable: Boolean! @default(value: true)
    category: String
    restaurant: Restaurant!
}

На игровой площадке Prisma GraphQL, которая напрямую подключена к базе данных, я могу отфильтровать элементы корзины, которые мне нужны, чтобы создать такой порядок:

query {
  customer(where: { id: "ck8zwslgs00da0712cq88e3oh" } ) {
    id
    cart(where: { dish: { restaurant: { id: "ck904gwl400mz0712v0azegm3" } } }) {
      quantity
      dish {
        name
        price
        restaurant {
          id
          name
        }
      }
    }
  }
}

выход:

{
  "data": {
    "customer": {
      "id": "ck8zwslgs00da0712cq88e3oh",
      "cart": [
        {
          "quantity": 2,
          "dish": {
            "name": "Nachos Plate Hawaii",
            "price": "1150",
            "restaurant": {
              "id": "ck904gwl400mz0712v0azegm3",
              "name": "Taco Bell"
            }
          }
        },
        {
          "quantity": 1,
          "dish": {
            "name": "Nachos Plate Vulcano",
            "price": "1250",
            "restaurant": {
              "id": "ck904gwl400mz0712v0azegm3",
              "name": "Taco Bell"
            }
          }
        }
      ]
    }
  }
}

Пока все хорошо, но теперь мне нужен тот же запрос на сервере Apollo с использованием привязки призмы. Я пробовал несколько вещей, но ни одна из них не работает. Первые два возвращают ошибку "Поле" тележка "не определено типом CustomerWhereUniqueInput". Последние два просто возвращают каждый cartItem без фильтра ресторана.

const data = await ctx.db.query.customer({
    where: {
        AND: [
            { 
                id: args.customerID 
            },
            {
                cart: {
                    dish : {
                        restaurant: {
                            id: args.restaurantID
                        }
                    }
                }
            }
        ]
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
        cart: {
            dish : {
                restaurant: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
    },
    cart: {
        where: {
            dish : {
                restaurant: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
    },
    cart: {
        dish : {
            restaurant: {
                where: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);

Может ли кто-нибудь помочь мне с правильным способом фильтрации по идентификатору клиента и идентификатору ресторана?

0 ответов

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