No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manipulación de arreglos en relaciones muchos a muchos

24/33
Recursos

Aportes 3

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Al método de añadir categorías yo le añadí algunas validaciones como comprobar si existe el product o la category y comprobar si ya contiene esta categoría para que no se repita.

async addCategoryToProduct(productId: number, categoryId: number) {
    const product = await this.productRepo.findOne(productId, {
      relations: ['categories', 'brand'],
    });
    if (!product) {
      throw new NotFoundException(`Product #${productId} not found`);
    }
    const category = await this.categoryRepo.findOne(categoryId);
    if (!category) {
      throw new NotFoundException(`Category #${categoryId} not found`);
    }
    if (!product.categories.find((item) => item.id == categoryId)) {
      product.categories.push(category);
    }
    return this.productRepo.save(product);
  }

Apuntes

Remover una categoría de un producto

// src\products\services\products.service.ts
async removeCategoryByProduct(productId: number, categoryId: number){
  const product = await this.productRepo.findOne(productId, {
    relations: ['categories']
  });
  product.categories = product.categories.filter((item) => {
    return item.id !== categoryId
  })
}
// src\products\controllers\products.controller.ts
@Delete(':id/category/:categoryId')
deleteCategory(
  @Param('id', ParseIntPipe) id: number,
  @Param('categoryId', ParseIntPipe) categoryId: number
){
  return this.productsService.removeCategoryByProduct(id, categoryId);
}

Agregar categoría a un producto

// src\products\services\products.service.ts
async addCategoryToProduct(productId: number, categoryId: number){
  const product = await this.productRepo.findOne(productId, {
    relations: ['categories']
  });
  const category = await this.categoryRepo.findOne(categoryId);
  product.categories.push(category);
  return this.productRepo.save(product);
}
// src\products\controllers\products.controller.ts
@Put(':id/category/:categoryId')
addCategoryToProduct(
  @Param('id', ParseIntPipe) idProduct: number,
  @Param('categoryId', ParseIntPipe) idCategory: number,
) {
  return this.productsService.addCategoryToProduct(idProduct, idCategory);
}

Modifique el código para que no se pueda agregar una categoría existente


  async addCategoryByProduct(productId: number, categoryId: number) {
    const product = await this.productRepo.findOne(productId, {
      relations: ['categories'],
    });
    const category = await this.categoryRepo.findOne(categoryId);
    if (!category) {
      throw new NotFoundException(`Category #${categoryId} not found`);
    }
    const exists = product.categories.some(
      (element) => element.id === categoryId,
    );
    if (!exists) {
      product.categories.push(category);
    }
    return this.productRepo.save(product);
  }