From 3af0f7a53060a9196b075bf149bfb7a51d6d240c Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 29 Jan 2026 10:28:06 +0330 Subject: [PATCH] product populate --- src/modules/product/product.module.ts | 2 +- .../product/providers/product.service.ts | 30 +++++++++++++++---- .../repositories/product.repository.ts | 2 +- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/modules/product/product.module.ts b/src/modules/product/product.module.ts index 4c4f7e7..c1a6bde 100644 --- a/src/modules/product/product.module.ts +++ b/src/modules/product/product.module.ts @@ -41,12 +41,12 @@ import { FormBuilderModule } from '../form-builder/form-builder.module'; // AttributeValueService ], exports: [ + ProductService, ProductRepository, CategoryRepository, CategoryService, // AttributeRepository, // AttributeService, - ProductService ], }) export class ProductModule { } diff --git a/src/modules/product/providers/product.service.ts b/src/modules/product/providers/product.service.ts index 09ef913..6857214 100644 --- a/src/modules/product/providers/product.service.ts +++ b/src/modules/product/providers/product.service.ts @@ -1,4 +1,4 @@ -import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; +import { BadRequestException, forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common'; import { CreateproductDto } from '../dto/create-product.dto'; import { FindproductsDto } from '../dto/find-products.dto'; import { ProductRepository } from '../repositories/product.repository'; @@ -8,6 +8,9 @@ import { Product } from '../entities/product.entity'; import { CategoryMessage, productMessage } from 'src/common/enums/message.enum'; import { CategoryRepository } from '../repositories/category.repository'; import { FieldService } from 'src/modules/form-builder/provider/field.service'; +import { FieldRepository } from 'src/modules/form-builder/repository/field.repository'; +import { Field } from 'src/modules/form-builder/entities/field.entity'; +import { Category } from '../entities/category.entity'; @Injectable() export class ProductService { @@ -15,7 +18,7 @@ export class ProductService { constructor( private readonly productRepository: ProductRepository, private readonly categoryRepository: CategoryRepository, - // private readonly fieldService: FieldService, + private readonly fieldRepository: FieldRepository, private readonly em: EntityManager, ) { } @@ -73,12 +76,29 @@ export class ProductService { return this.productRepository.findAllPaginated(dto); } - async findById(productId: string): Promise { + async findById(productId: string): Promise< + Omit & { + attributes: Field[]; + category: Category; + } + > { const product = await this.productRepository.findOne({ id: productId }, - { populate: ['category', 'attributes', 'attributes.values'] }); + { populate: ['category'] }); if (!product) throw new NotFoundException(productMessage.NOT_FOUND); - return product; + + const attributes = product?.attributes + + let fields: Field[] = [] + + if (attributes && attributes.length) { + fields = await this.fieldRepository.find({ + id: { $in: attributes } + }, + { populate: ['options'] }) + } + + return { ...product, attributes: fields }; } // async update( id: string, dto: Partial): Promise { diff --git a/src/modules/product/repositories/product.repository.ts b/src/modules/product/repositories/product.repository.ts index b94176d..5f4f9f5 100644 --- a/src/modules/product/repositories/product.repository.ts +++ b/src/modules/product/repositories/product.repository.ts @@ -45,7 +45,7 @@ export class ProductRepository extends EntityRepository { limit, offset, orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' }, - populate: ['attributes', 'attributes.values'], + populate: [], }); const totalPages = Math.ceil(total / limit);