No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

TypeORM: active record vs. repositories

11/33
Recursos
// src/products/services/products.service.ts

import { InjectRepository } from '@nestjs/typeorm'; // 馃憟 import
import { Repository } from 'typeorm'; // 馃憟 import

import { Product } from './../entities/product.entity'; // 馃憟 entity
import { CreateProductDto, UpdateProductDto } from './../dtos/products.dtos';

@Injectable()
export class ProductsService {
  constructor(
    @InjectRepository(Product) private productRepo: Repository, // 馃憟 Inject
  ) {}

  findAll() {
    return this.productRepo.find();  // 馃憟 use repo
  }

  findOne(id: number) {
    const product = this.productRepo.findOne(id);  // 馃憟 use repo
    if (!product) {
      throw new NotFoundException(`Product #${id} not found`);
    }
    return product;
  }
  ...
}
// src/users/services/users.service.ts

  async getOrderByUser(id: number) {
    const user = this.findOne(id);
    return {
      date: new Date(),
      user,
      products: await this.productsService.findAll(),
    };
  }
// src/database/database.module.ts

@Global()
@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      inject: [config.KEY],
      useFactory: (configService: ConfigType<typeof config>) => {
        const { user, host, dbName, password, port } = configService.postgres;
        return {
          type: 'postgres',
          host,
          port,
          username: user,
          password,
          database: dbName,
          synchronize: true, // 馃憟 new attr
          autoLoadEntities: true, // 馃憟 new attr
        };
      },
    }),
  ],
  ...
})
export class DatabaseModule {}

Aportes 7

Preguntas 6

Ordenar por:

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

cuidado con synchronize: true, // 馃憟 new attr
en ambientes productivos eso en producion siempre debe estar en false

No olviden encender su container de postgres y pg admin. Para que pueda correr su proyecto de Nestjs con la conexi贸n de la base de datos.

Por si alguien los necesita para sus notas, los dos trozos de c贸digo utilizados para explicar la diferencia entre active records y repositories:

Active records:

const product = new Product();
product.name = "Product 1";
await product.save(); 
await product.remove(); 
...
await Product.findOne(1); 

Repositories:

const productRepo = connection.getRepository(Product);

const product = new Product();
product.name = "Product 1";

await productRepo.save(product); 
await productRepo.remove(product); 
await productRepo.findOne(1); 

El curso esta muy interesante, pero da muchas vueltas para hace un simple endpoint, obvio, ya no se puede corregir por que el video esta grabado y ni modo que lo vuelvan a grabar, pero no esta bien hecho, es decir, se entiende, pero parece que lo que el profesor quesera es confundir de las vueltas que da para algo simple, de hecho, no encaja con la filosof铆a de Platzi, se supone que el curso deber铆a facilitar el aprendizaje, no confundir al estudiante, es mas, estoy sospechando que terminare el curso y no se mostrara ni siquiera un simple endpoint de registro o login. Entonces, que hago? me voy a Youtube a repasar?

Los repositorios son el mismo patron que usa spring, es una de las tantas similitudes que tienen los dos frameworks

Para quienes esten haciendo el curso en este momento, el metodo findOne esta caido

En su lugar usar findOneBy({id:id})

Es importante que al agregar el decorador Entity le asignen un nombre para respetar las buenas practicas, de esta forma evitan que al momento de hacer la sincronizaci贸n, el nombre de la tabla se genere en singular.

@Entity({ name: 'users' })