Я работаю над платформой заказа еды с Prisma, Prisma-binding и Apollo Server на сервере. Клиент может выбрать ресторан в своем районе и добавить одно или несколько блюд в свою корзину. Возможно, что когда ди sh из ресторана x уже добавлен, клиент решает сделать заказ из другого ресторана, ресторана y. Поэтому мне нужно отфильтровать добавленные блюда при оформлении заказа на основе идентификатора клиента и окончательно выбранного ресторана в бэкэнде, прежде чем создавать заказ и URL-адрес платежа.
В моей призме три типа данных модель данных: Customer, CartItem и Di sh
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, которая напрямую связана с базой данных, я могу отфильтровать элементы CartItems, которые мне нужны для создания заказа, следующим образом:
query {
customer(where: { id: "ck8zwslgs00da0712cq88e3oh" } ) {
id
cart(where: { dish: { restaurant: { id: "ck904gwl400mz0712v0azegm3" } } }) {
quantity
dish {
name
price
restaurant {
id
name
}
}
}
}
}
output:
{
"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 с использованием prisma-binding. Я попробовал несколько вещей, но ни одна из них не работает. Первые два возвращают ошибку "Поле \" Корзина \ "не определено типом 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);
Может ли кто-нибудь помочь мне с правильным способом фильтрации идентификатора клиента и идентификатора ресторана?