с гитхаба...
Задача:
В nestjs через mongoose и graphql (code first) реализовать запросы product (многие к одному seller) и seller (один ко многим products), но чтобы внутри product можно было получить данные о seller и внутри seller получить массив его products[] со всеми данными.
---
Могу получить внутри product seller:
product.entity
@Field(() => Seller)
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'Seller', required: true })
seller: Seller;
products.service
async getSeller(id: string): Promise<Seller> {
return this.sellerService.findOne(id);
}
---
но не могу сделать получение products из запроса seller
seller.entity
@Field(() => [Product], { nullable: true })
@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product' }] })
products?: Product[];
sellers.service
// ВОТ ЗДЕСЬ ОШИБКА (как понимаю)
async findOne(id: string): Promise<Seller> {
return this.sellerModel.findById(id).populate(['products']).exec();
}
В таком виде как сейчас получаю пустой массив products
Делай отдельно схему для графкуэля и отдельно схему монги связи через даталоадер загружай и врезолвере указывай ResolveField вот тут у меня есть пример с даталоадером https://github.com/OpenMovieDB/openmoviedb-backend вот тут показательная модель https://github.com/OpenMovieDB/openmoviedb-backend/blob/main/src/domains/movie/movie.resolver.ts
забыл про resolver, upd сообщение https://t.me/nest_ru/249168
ну у тебя кстати все просто решается. В модели seller ты обьявлешь резолвер для поля @ResolveField('products', () => [ProductModel], { nullable: true }) а в резолвере продукта @ResolveField('seller', () => SellerModel, { nullable: true })
как понимаю возникнет циркулярная зависимость, если в sellers.revolver @ResolveField для products, то придется экспортировать-импортировать products.service, а у меня уже экспортируется-импортируется sellers.service в products.revolver @ResolveField для seller - это же бэд практикс?
обычно в таких ситуациях указывается лимит на количество рекурсивных вызовов. Не помню есть ли у графкуэля там значение по умолчанию а импорты внутри неста не проблема разрешить обычными методами можно и кстати без импортов это сделать, подтянув через запрос монги данные
"можно и кстати без импортов это сделать, подтянув через запрос монги данные" это не такого рода случаем запрос должен быть? вот он не работает... return this.sellerModel.findById(id).populate(['products']).exec();
Обсуждают сегодня