No tienes acceso a esta clase

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

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
2 Hrs
27 Min
10 Seg

Proyecto: migración de funciones a clases

17/25
Recursos

Aportes 12

Preguntas 3

Ordenar por:

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

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

Les dejo el código compatible con la versión actual de faker y la versión actual de la api, que ahora sí contiene un createdAt y un updatedAt:

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

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

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

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

  update = (id: Product['id'], data: UpdateProductDto): Product => {
    const index = this.products.findIndex((item) => item.id === id);
    const prevData = this.products[index];

    this.products[index] = {
      ...prevData,
      ...data,
    };

    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

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);
  }
}

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

No entiendo el Omit y que es un dto, en el video no lo explica solo lo usa, alguien tiene idea de esto? Gracias ?
A quienes les aparezca un error respecto al import de faker, les recomiendo lo siguiente: 1. Aplicar el siguiente comando en la terminal:` npm install --save-dev @faker-js/faker` 2. Luego implementamos el import de la siguiente manera: `import { faker } from '@faker-js/faker';` Para mayor información visitar la web oficial: <https://www.npmjs.com/package/@faker-js/faker> ##
Hay cambios con faker, se debe de instalar como dependencia import { faker } from '@faker-js/faker';create (data: CreateProductDto) : Product {    const newProduct = {      id: faker.number.int(),      creationAt: new Date(),      updatedAt: new Date(),      category: {        id: data.categoryId,        name: faker.commerce.department(),        image: faker.image.urlPicsumPhotos(),        creationAt: new Date(),        updatedAt: new Date(),      },      ...data,    }    return this.add(newProduct);  }```js npm install @faker-js/faker --save-dev ```y se debe importar de este modo ```js import { faker } from '@faker-js/faker'; ```La api de productos de Platzi cambio, se debe agreagar los createdAt y updateAt que incluye ```js create (data: CreateProductDto) : Product { const newProduct = { id: faker.number.int(), creationAt: new Date(), updatedAt: new Date(), category: { id: data.categoryId, name: faker.commerce.department(), image: faker.image.urlPicsumPhotos(), creationAt: new Date(), updatedAt: new Date(), }, ...data, } return this.add(newProduct); } ```y omitirlos en los dtos ```js export interface CreateProductDto extends Omit<Product, 'id' | 'creationAt'| 'updatedAt' | 'category'> { categoryId: Category['id']; } ```export interface CreateProductDto extends Omit\<Product, 'id' | 'creationAt'| 'updatedAt' | 'category'> {  categoryId: Category\['id'];}

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';