Вопросы по Nest.js

Какова роль миграционных скриптов в TypeORM и как создать и запустить миграции в приложении NestJS?

Миграционные скрипты в TypeORM играют важную роль в управлении изменениями в структуре базы данных в течение жизненного цикла приложения. Миграции позволяют вам отслеживать изменения схемы базы данных и применять их последовательно в различных средах (например, на локальном компьютере разработчика, в тестовой среде и на сервере).

Зачем нужны миграции?

  1. Версионность схемы: Миграции позволяют обновлять и понижать версии схемы базы данных, записывая каждое изменение в виде отдельного скрипта.
  2. Совместная работа: В команде разработчиков миграции помогают избежать конфликтов при изменении схемы базы данных.
  3. Автоматизация развертывания: Миграции можно автоматически применять в процессе развертывания приложения, что упрощает управление обновлениями.

Как создать и запустить миграции в NestJS?

Для работы с миграциями в NestJS вам потребуется настроенный проект с использованием библиотеки TypeORM. Перед началом убедитесь, что у вас установлены необходимые зависимости:

npm install --save typeorm @nestjs/typeorm

Шаг 1: Настройка подключения к базе данных

В файле app.module.ts настройте подключение к базе данных, указав необходимые параметры:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres', // тип базы данных
      host: 'localhost',
      port: 5432,
      username: 'your_username',
      password: 'your_password',
      database: 'your_database',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      migrations: [__dirname + '/migrations/**/*{.ts,.js}'],
      synchronize: false, // обязательно устанавливайте false при использовании миграций
    }),
  ],
})
export class AppModule {}

Шаг 2: Создание миграции

Чтобы создать новую миграцию, используйте команду CLI TypeORM или создайте файл миграции вручную. Пример создания миграции с помощью CLI:

npx typeorm migration:create -n CreateUserTable

Это создаст файл миграции в папке, указанной в параметре migrations. Откройте созданный файл и добавьте ваши изменения. Пример миграции для создания таблицы пользователей:

import { MigrationInterface, QueryRunner, Table } from 'typeorm';

export class CreateUserTable1612345678901 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.createTable(
      new Table({
        name: 'user',
        columns: [
          {
            name: 'id',
            type: 'int',
            isPrimary: true,
            isGenerated: true,
          },
          {
            name: 'name',
            type: 'varchar',
          },
          {
            name: 'email',
            type: 'varchar',
            isUnique: true,
          },
        ],
      }),
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.dropTable('user');
  }
}

Шаг 3: Запуск миграции

После того как вы создали миграцию, вы можете ее запустить, используя следующую команду:

npx typeorm migration:run

Эта команда применит все миграции, которые еще не были выполнены.

Шаг 4: Откат миграции

Если вы хотите откатить миграцию, используйте команду:

npx typeorm migration:revert

Эта команда вернет последнюю выполненную миграцию.

Заключение

Использование миграций в TypeORM значительно упрощает процесс управления схемой базы данных. Это особенно полезно при работе над проектами в команде, так как позволяет поддерживать согласованность и упрощает работу с изменениями базы данных. Теперь, когда вы знаете, как создавать и управлять миграциями в NestJS, вы можете без опасений вносить изменения в структуру своей базы данных.