No tienes acceso a esta clase

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

Proyecto: migración de funciones a clases

17/25
Recursos

Aportes 8

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

ami me dice que todos los metodos de faker estan deprecados xd

Si todo lo relacionado con Faker les da error, deben de utlizar el nombre de faker entre llaves. así

import { faker } from "@faker-js/faker";

Creo que al método add debería hacerlo privado, así no se puede acceder desde fuera de la clase. Ya que su finalidad es ser utilizado internamente por el método create

import { faker } from '@faker-js/faker';
import { Product } from '../models/product.model';
import { CreateProductDto, updateProductDto } from '../dtos/product.dto';

export class ProductMemoryService {
  private products: Product[] = [];

  create(data: CreateProductDto): Product {
    const newProduct = {
      ...data,
      id: faker.datatype.number(),
      category: {
        id: data.categoryId,
        name: faker.commerce.department(),
        image: faker.image.imageUrl(),
      },
    };
    this.products.push(newProduct);
    return this.add(newProduct);
  }

  add(product: Product) {
    this.products.push(product);
    return product;
  }

  updateProduct(id: Product['id'], changes: updateProductDto): Product {
    const index = this.products.findIndex((item) => item.id === id);
    const prevData = this.products[index];
    this.products[index] = {
      ...prevData,
      ...changes,
    };
    return this.products[index];
  }

  findOne(id: Product['id']) {
    return this.products.find((item) => item.id === id);
  }
}

Me tarde un rato en saber por que me daba error el metodo “create” era por que tenia creationAt y UpdatedAt en las propiedades de la interfaz Product y Category

Migración de mi códig:

import { faker } from '@faker-js/faker';
import { Product } from "../models/product.model";
import { CreateProductDto, UpdateProductDto } from "../dtos/product.dto";
import { Category } from '../models/category.model';

export class ProductMemoryService {
  private products: Product[] = [];

  create (data: CreateProductDto): Product {
    const newProduct = {
      ...data,
      id: faker.datatype.number(),
      category: {
        id: data.categoryId,
        createdAt: faker.date.past(5),
        name: faker.commerce.department(),
        image: faker.image.imageUrl()
      },
    };
    
    return this.add(newProduct);
  };

  add (product: Product) {
    this.products.push(product);
    return product;
  };

  update (id: number, changes: UpdateProductDto): Product {
    const index = this.products.findIndex(item => item.id === id);
    const prevData = this.products[index];
    this.products[index] = {
    ...prevData,
    ...changes,
    }
    return this.products[index];
  };

  delete (id: number) {
    const getIndexOfProduct = (id: Category['id']) =>
      this.products.findIndex(item => item.id === id);
    
    const index: number = getIndexOfProduct(id);

    this.products.splice(index, 1);
    console.log(this.products);
  };

  getOne (id: number) {
    return this.products.find(item => item.id === id);
  };
}

Documentación de Faker

Aqui esta mi version de la function create(). Use los metodos de la version mas reciente de faker

    create(data: CreateProductDto): Product {
        const newProduct = {
            ...data,
            id: faker.number.int(),
            category: {
                id: data.categoryId,
                name: faker.commerce.department(),
                image: faker.image.url()
            }
        }
        return this.add(newProduct);
    }

Tambien cambie el importe de faker:

import { faker } from '@faker-js/faker';