From fb82d3dd221efeba5b0110bd00908faecbdb30d7 Mon Sep 17 00:00:00 2001 From: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Mon, 11 Jul 2022 15:50:01 +0200 Subject: [PATCH] fix(medusa): Add migration ensuring correct state of BatchJob model (#1825) --- .changeset/shiny-windows-stare.md | 5 +++ .../1649775522087-add_batch_job_model.ts | 8 ++-- .../1657267320181-extended_batch_job.ts | 38 +++++++++++++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 .changeset/shiny-windows-stare.md create mode 100644 packages/medusa/src/migrations/1657267320181-extended_batch_job.ts diff --git a/.changeset/shiny-windows-stare.md b/.changeset/shiny-windows-stare.md new file mode 100644 index 0000000000..7e1abf5f5d --- /dev/null +++ b/.changeset/shiny-windows-stare.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +- Add migration that ensures the correct state of the batch job table regardless of previous migrations diff --git a/packages/medusa/src/migrations/1649775522087-add_batch_job_model.ts b/packages/medusa/src/migrations/1649775522087-add_batch_job_model.ts index b6fccc109a..cfa20c2452 100644 --- a/packages/medusa/src/migrations/1649775522087-add_batch_job_model.ts +++ b/packages/medusa/src/migrations/1649775522087-add_batch_job_model.ts @@ -5,7 +5,7 @@ export class addBatchJobModel1649775522087 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { await queryRunner.query( - `CREATE TABLE "batch_job" + `CREATE TABLE "batch_job" ( "id" character varying NOT NULL, "type" text NOT NULL, @@ -27,16 +27,16 @@ export class addBatchJobModel1649775522087 implements MigrationInterface { ) await queryRunner.query( - `ALTER TABLE "batch_job" + `ALTER TABLE "batch_job" ADD CONSTRAINT "FK_fa53ca4f5fd90605b532802a626" FOREIGN KEY ("created_by") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION` ) } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query( - `ALTER TABLE "batch_job" + `ALTER TABLE "batch_job" DROP CONSTRAINT "FK_fa53ca4f5fd90605b532802a626"` ) await queryRunner.query(`DROP TABLE "batch_job"`) } -} \ No newline at end of file +} diff --git a/packages/medusa/src/migrations/1657267320181-extended_batch_job.ts b/packages/medusa/src/migrations/1657267320181-extended_batch_job.ts new file mode 100644 index 0000000000..017a33a1b5 --- /dev/null +++ b/packages/medusa/src/migrations/1657267320181-extended_batch_job.ts @@ -0,0 +1,38 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class extendedBatchJob1657267320181 implements MigrationInterface { + name = "extendedBatchJob1657267320181" + + public async up(queryRunner: QueryRunner): Promise { + // check if batch job table exists and status column exists + // if that's the case, the previous migration has already been run + const batchJobColumnStatusExists = await queryRunner.query(` + SELECT exists ( + SELECT FROM information_schema.columns + WHERE table_name = 'batch_job' + AND column_name = 'status' + )`) + + // if the table exists, we alter the table to add the new columns + if (batchJobColumnStatusExists[0].exists) { + await queryRunner.query(` + ALTER TABLE "batch_job" DROP COLUMN "status"; + DROP TYPE "public"."batch_job_status_enum"; + ALTER TABLE "batch_job" ADD "dry_run" boolean NOT NULL DEFAULT false; + ALTER TABLE "batch_job" ADD "pre_processed_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" ADD "processing_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" ADD "confirmed_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" ADD "completed_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" ADD "canceled_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" ADD "failed_at" TIMESTAMP WITH TIME ZONE; + ALTER TABLE "batch_job" DROP COLUMN "created_by"; + ALTER TABLE "batch_job" ADD "created_by" character varying; + ALTER TABLE "batch_job" ADD CONSTRAINT "FK_cdf30493ba1c9ef207e1e80c10a" FOREIGN KEY ("created_by") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + `) + } + } + + public async down(queryRunner: QueryRunner): Promise { + void 0 + } +}