Introducción

1

¬ŅYa terminaste el Curso de NestJS: Programaci√≥n Modular?

2

Platzi Store: presentación del proyecto e instalación

Database

3

Cómo instalar Docker para este proyecto

4

Configuración de PostgresSQL en Docker

5

Explorando postgres con interfaces gr√°ficas y terminal

6

Integración de node-postgres con NestJS

7

Conexión como inyectable y ejecutando un SELECT

8

Usando variables de ambiente

TypeORM

9

¬ŅQu√© es un ORM? Instalando y configurando TypeORM Module

10

Creando tu primera entidad

11

TypeORM: active record vs. repositories

12

Crear, actualizar y eliminar

13

Cambiar a Mysql demo (opcional)

Migraciones

14

Sync Mode vs. Migraciones en TypeORM

15

Configurando migraciones y npm scripts

16

Corriendo migraciones

17

Modificando una entidad

Relaciones

18

Relaciones uno a uno

19

Resolviendo la relación uno a uno en el controlador

20

Relaciones uno a muchos

21

Resolviendo la relación uno a muchos en el controlador

22

Relaciones muchos a muchos

23

Resolviendo la relación muchos a muchos en el controlador

24

Manipulación de arreglos en relaciones muchos a muchos

25

Relaciones muchos a muchos personalizadas

26

Resolviendo la relación muchos a muchos personalizada en el controlador

Consultas

27

Paginación

28

Filtrando precios con operadores

29

Agregando indexadores

30

Modificando el naming

31

Serializar

Migración a NestJS 9 y TypeORM 0.3

32

Actualizando Dependencias para NestJS 9

33

Cambios en TypeORM 0.3

34

Migraciones en TypeORM 0.3

Próximos pasos

35

Cómo solucionar una referencia circular entre módulos

36

Contin√ļa con el Curso de NestJS: Autenticaci√≥n con Passport y JWT

No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Modificando una entidad

17/36
Recursos

Aportes 8

Preguntas 5

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Lo que vimos:

product.entity.ts

import {
  PrimaryGeneratedColumn,
  Column,
  Entity,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: 255, unique: true })
  name: string;

  @Column({ type: 'text' })
  description: string;

  @Column({ type: 'int' })
  price: number;

  @Column({ type: 'int' })
  stock: number;

  @Column({ type: 'varchar' })
  image: string;

  @CreateDateColumn({
    type: 'timestamptz',
    default: () => 'CURRENT_TIMESTAMP',
  })
  createAt: Date;

  @UpdateDateColumn({
    type: 'timestamptz',
    default: () => 'CURRENT_TIMESTAMP',
  })
  updateAt: Date;
}

En mi caso que estoy usando mysql solo me funciono de esta forma

@Column({ type: "timestamp", default: () => "CURRENT_TIMESTAMP"})
  createAt: Date;

@Column({ type: "timestamp", default: () => "CURRENT_TIMESTAMP"})
  updateAt: Date;

Al agregar cambios a una entidad, se tiene que generar la migracion y ejecutarla.

Se le agrega a la entidad product las fechas de creacion y actualizacion automaticas:

import {
  PrimaryGeneratedColumn,
  Column,
  Entity,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: 255, unique: true })
  name: string;

  @Column({ type: 'text' })
  description: string;

  @Column({ type: 'int' })
  price: number;

  @Column({ type: 'int' })
  stock: number;

  @Column({ type: 'varchar' })
  image: string;

  @CreateDateColumn({
    type: 'timestamptz',
    default: () => 'CURRENT_TIMESTAMP',
  })
  createAt: Date;

  @UpdateDateColumn({
    type: 'timestamptz',
    default: () => 'CURRENT_TIMESTAMP',
  })
  updateAt: Date;

Se genera la migracion npm run migrations:generate -- add-fields

Migration /home/wlensinas/code/nestjs-typeorm/src/database/migrations/1621891104050-add-fields.ts has been generated successfully.

Se ejecutan los cambios en la base de datos npm run migrations:run

query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = current_schema() AND "table_name" = 'migrations'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
1 migrations are already loaded in the database.
2 migrations were found in the source code.
init1621883836551 is the last executed migration. It was executed on Mon May 24 2021 16:17:16 GMT-0300 (Argentina Standard Time).
1 migrations are new migrations that needs to be executed.
query: START TRANSACTION
query: ALTER TABLE "product" ADD "createAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
query: ALTER TABLE "product" ADD "updateAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
query: INSERT INTO "migrations"("timestamp", "name") VALUES ($1, $2) -- PARAMETERS: [1621891104050,"addFields1621891104050"]
Migration addFields1621891104050 has been executed successfully.
query: COMMIT

Se listan los cambios npm run migrations:show

query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = current_schema() AND "table_name" = 'migrations'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
 [X] init1621883836551
 [X] addFields1621891104050

Este curso esta genial, he aprendido una gran cantidad de conceptos y buenas practicas que no sabía ni que existían

[ExceptionHandler] No repository for "Brand" was found. Looks like this entity is not registered in current 
"default" connection? +184ms

Por si les sale este error, recuerden agregar en el archivo database.module.ts la propiedad de autoLoadEntities.

otra forma en que podr√≠a entenderse las migraciones, es que cada una representa un estado de la BD en alguna instancia de tiempo, tenerlas organizadas de esta manera nos permite incluso regresarnos a alg√ļn estado anterior si es necesario.

Maravilloso el curso hasta aquí, ¡vamos con todo!

Modificando una entidad

Supongamos que ahora queremos modificar una entidad como por ejemplo Product, veamos como hacerlo:

  • **src/products/entities/product.entity.ts**:
@Entity()
export class Product {
  // ...

  // fecha de producto creado con formato de zona horaría automática y creado de forma automática
  @CreateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
  createdAt: Date;

  // fecha de producto actualizado con formato de zona horaría automática y creado de forma automática
  // se actualiza cada que hagamos un "".save()"
  @UpdateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
  updatedAt: Date;
}

¬ŅPero ahora como le decimos a nuestra API que actualizamos esta entidad? Para esto vamos a nuestra terminal y ejecutamos los siguientes comandos.

# creamos migración
npm run migration:generate

# ejecutamos migración
npm run migration:run

Y listo, ya debería actualizar nuestros datos en nuestra tabla de manera adecuada, así de fácil es correr migraciones de actualización de entidades con TypeORM: