Skip to main content

Database migration

Migrations will be run automatically during CI/CD (or when starting the project with 'make dev' locally), however:

  • If you have made changes to the database models you will need to create a new migration and generate it, see example below:

    • First: START UP LOCAL DEVELOPMENT SERVER

      • Below commands should be run from ./packages/bff
      • "name-of-my-change" should obviously be named something more appropriate
      CLIENT_ID="<CLIENT ID HERE>" CLIENT_SECRET="CLIENT SECRET HERE" pnpm typeorm migration:generate src/migrations/name-of-my-change --dataSource src/data-source.ts

      Output should look something like:

      CLIENT_ID="<<CENCORED>>" CLIENT_SECRET="<<CENCORED>>" pnpm typeorm migration:generate src/migrations/name-of-my-change --dataSource src/data-source.ts

      > bff@1.0.0 typeorm /Users/digdir/dialogporten-frontend/packages/bff
      > typeorm-ts-node-esm "migration:generate" "src/migrations/name-of-my-change" "--dataSource" "src/data-source.ts"

      Migration /Users/digdir/dialogporten-frontend/packages/bff/src/migrations/1737028371799-name-of-my-change.ts has been generated successfully.
  • After these migration files are generated, restart project if in local dev env - if not then migration will be ran in CI/CD.

  • IMPORTANT: If you are creating a "nullable: false" row, remember to add the "DEFAULT 'your default value'" to your generated migration script (see example below), which all pre-existing data will get as value of this new column.

    import { MigrationInterface, QueryRunner } from 'typeorm';

    export class AddNonNull1737471965228 implements MigrationInterface {
    name = 'AddNonNull1737471965228';

    public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
    `ALTER TABLE "saved_search" ADD "nonnulltest" character varying(255) NOT NULL DEFAULT 'default_value'`,
    );
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`ALTER TABLE "saved_search" DROP COLUMN "nonnulltest"`);
    }
    }

  • Troubleshooting:

    • Delete bff/dist folder to clear old files if you get error running the migration
  • TEST LOCALLY before pushing to branch.