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

Corriendo migraciones

16/36
Recursos

Aportes 7

Preguntas 2

Ordenar por:

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

Lo que vimos fue:

package.json

"scripts": {
    "migrations:generate": "npm run typeorm -- migration:generate -n",
    "migrations:run": "npm run typeorm -- migration:run",
    "migrations:show": "npm run typeorm -- migration:show",
    "migrations:drop": "npm run typeorm -- migration:drop"
  },

database.module.ts

imports: [
    TypeOrmModule.forRootAsync({
      inject: [config.KEY],
      useFactory: (configService: ConfigType<typeof config>) => {
        const { user, password, host, dbName, port } = configService.postgres;

        return {
          type: 'postgres',
          host,
          port,
          username: user,
          password,
          database: dbName,
          synchronize: false,
          autoLoadEntities: true,
        };
      },
    }),
  ],

Los comandos que utilisamos fueron:

Para crear la migration en la base de datos

npm run migrations:run

Para ver. quemigrations han sido creados

npm run migrations:run

Si le agregan el revert esta bueno experimentarlo, mas que nada para volver a atras los cambios en caso de que se haya detectado algun bug y tengas que salir a patchear la version que sacaste.

Agregas en el package.json

    "migrations:revert": "npm run typeorm -- migration:revert"

Este el output:

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.
init1621883836551 is the last executed migration. It was executed on Mon May 24 2021 16:17:16 GMT-0300 (Argentina Standard Time).
Now reverting it...
query: START TRANSACTION
query: DROP TABLE "user"
query: DROP TABLE "customer"
query: DROP TABLE "product"
query: DROP TABLE "category"
query: DROP TABLE "brand"
query: DELETE FROM "migrations" WHERE "timestamp" = $1 AND "name" = $2 -- PARAMETERS: [1621883836551,"init1621883836551"]
Migration init1621883836551 has been reverted successfully.
query: COMMIT

Alguien mas en vez de drop puso hakai? xD

Un tip para el script de generar migraciones: agreguen el argumento -p (pretty) para que los comandos SQL autogenerados en el archivo de migraciones tengan un formato multilínea más fácil de leer.

# package.json
# ...
scripts:
	# ...
	"migrations_generate":  "npm run typeorm -- migration:generate -p -n"
# ...
Configuración del data-source.ts: ```js import { ConfigService } from '@nestjs/config'; import { config } from 'dotenv'; import { DataSource, DataSourceOptions } from 'typeorm'; config(); const configService = new ConfigService(); export const dataSourceOptions: DataSourceOptions = { type: 'postgres', username: configService.get('POSTGRES_USER'), password: configService.get('POSTGRES_PASSWORD'), database: configService.get('POSTGRES_DB'), port: configService.get('POSTGRES_PORT'), host: configService.get('POSTGRES_HOST'), synchronize: false, logging: true, entities: ['src/**/*.entity.{ts,js}'], migrations: ['src/database/migrations/*.{ts,js}'], }; export const AppDataSource = new DataSource(dataSourceOptions); ``` Comandos: ```js "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d ./src/database/data-source.ts", "m:g": "npm run typeorm migration:generate ./src/database/migrations/update", "m:run": "npm run typeorm -- migration:run", "m:show": "npm run typeorm -- migration:show", "m:revert": "npm run typeorm -- migration:revert" ```

Corriendo migraciones

Es importante que al momento de correr migraciones tengamos desactivado el modo síncrono de nuestra base de datos:

  • src/database/database.module.ts:
@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      inject: [config.KEY],
      useFactory: (configService: ConfigType<typeof config>) => {
        const { user, host, dbName, password, port } = configService.postgres;
        return {
          // ...
          synchronize: false,
          autoLoadEntities: true,
        };
      },
    }),
  ],
  exports: [TypeOrmModule],
})

En caso de que tengas tus tablas creadas y no te permita ejecutar la migración, debes borrar las tablas.

Ahora, para correr las migraciones solo debemos añadir los siguientes scripts en nuestro **package.json**:

{
  "scripts": {
		// correr la última migración creada
		"migration:run": "npm run typeorm migration:run",
    
		// muestra las migraciones ejecutadas anteriormente
		"migration:show": "npm run typeorm migration:show",

		// borra TODAS lAS TABLAS (Peligroso)
		"migration:drop": "npm run typeorm migration:drop",

		// Revierte la última migración hecha
		"migration:revert": "npm run typeorm migration:revert",
  },
}

Para correr estos comandos, recordemos que tenemos que correr el comando:

npm run <script>

Y listo, así es como corremos migraciones.

En esta versión, además del comando con el flag -d debemos indicar donde están las migraciones, además de crear el datasource para la conexión con la base de datos…