Как делать миграции в nestjs с postgresql и sequelize?

Для работы с миграциями в NestJS с использованием PostgreSQL и Sequelize вам потребуется установить соответствующие библиотеки и настроить их.

1. Установка зависимостей:
В корне вашего проекта выполните следующую команду:

   npm install --save @nestjs/sequelize sequelize sequelize-cli pg pg-hstore

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

   import { Module } from '@nestjs/common';
   import { SequelizeModule } from '@nestjs/sequelize';

   @Module({
     imports: [
       SequelizeModule.forRoot({
         dialect: 'postgres',
         host: 'localhost',
         port: 5432,
         username: 'your_username',
         password: 'your_password',
         database: 'your_database',
         autoLoadModels: true,
         synchronize: true, // Внимание: Synchronize увеличивает время запуска в производственных приложениях
       }),
     ],
   })
   export class AppModule {}

3. Создание моделей:
В директории вашего модуля создайте папку models, а внутри нее создайте файлы моделей. Ниже приведен пример модели пользователей:

   import { Model, Table, Column } from 'sequelize-typescript';

   @Table
   export class User extends Model<User> {

     @Column
     name: string;

     @Column
     email: string;

     @Column
     password: string;
   }

4. Создание миграций:
Для создания миграций выполните следующую команду в корне вашего проекта:

   npx sequelize-cli migration:generate --name=create-users

Это создаст файл миграции в директории migrations. В файле миграции определите необходимые изменения в базе данных, например:

   'use strict';

   module.exports = {
     up: async (queryInterface, Sequelize) => {
       await queryInterface.createTable('users', {
         id: {
           allowNull: false,
           autoIncrement: true,
           primaryKey: true,
           type: Sequelize.INTEGER
         },
         name: {
           type: Sequelize.STRING
         },
         email: {
           type: Sequelize.STRING,
           unique: true
         },
         password: {
           type: Sequelize.STRING
         },
         createdAt: {
           allowNull: false,
           type: Sequelize.DATE
         },
         updatedAt: {
           allowNull: false,
           type: Sequelize.DATE
         }
       });
     },

     down: async (queryInterface, Sequelize) => {
       await queryInterface.dropTable('users');
     }
   };

5. Применение миграций:
Для применения миграций выполните следующую команду:

   npx sequelize-cli db:migrate

После выполнения этой команды таблица "users" будет создана в базе данных PostgreSQL.

6. Откат миграций:
Если вам нужно отменить миграцию, выполните следующую команду:

   npx sequelize-cli db:migrate:undo

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

Вот и все! Теперь вы знаете, как делать миграции в NestJS с использованием PostgreSQL и Sequelize. Вы можете создавать модели, создавать миграции для изменения базы данных, применять и откатывать миграции при необходимости.