penisularhr / src / database / migrations / 1698343862122-create-incentive-record-and-block.ts
1698343862122-create-incentive-record-and-block.ts
Raw
/* eslint-disable canonical/no-unused-exports */
/* eslint-disable max-len */
import { type MigrationInterface, type QueryRunner } from 'typeorm';

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

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "incentive_records" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "amount" numeric(20,6) NOT NULL DEFAULT '0', "quantity" numeric(20,6) NOT NULL DEFAULT '0', "threshold" numeric(20,6) NOT NULL DEFAULT '0', "date" TIMESTAMP NOT NULL, "employee_id" uuid, "incentive_setting_id" uuid, CONSTRAINT "PK_5581ec1b3a2b93f5f85dd977ad3" PRIMARY KEY ("id"))`,
    );
    await queryRunner.query(
      `CREATE TABLE "blocks" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "name" character varying NOT NULL, "is_active" boolean NOT NULL DEFAULT true, CONSTRAINT "UQ_cf76c8e0cef079c9441a5792461" UNIQUE ("name"), CONSTRAINT "PK_8244fa1495c4e9222a01059244b" PRIMARY KEY ("id"))`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."incentive_settings_period_enum" AS ENUM('DAILY', 'MONTHLY', 'ONLY_ONCE')`,
    );
    await queryRunner.query(
      `ALTER TABLE "incentive_settings" ADD "period" "public"."incentive_settings_period_enum" NOT NULL`,
    );

    await queryRunner.query(
      `ALTER TYPE "public"."activity_record_settings_incentive_name_enum" RENAME TO "activity_record_settings_incentive_name_enum_old"`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."activity_record_settings_incentive_name_enum" AS ENUM('sucker planting', 'sucker harvest', 'fruit harvest')`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ALTER COLUMN "incentive_name" TYPE "public"."activity_record_settings_incentive_name_enum" USING "incentive_name"::"text"::"public"."activity_record_settings_incentive_name_enum"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."activity_record_settings_incentive_name_enum_old"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ALTER COLUMN "extra_rate_per" SET DEFAULT '1.5'`,
    );
    await queryRunner.query(
      `ALTER TABLE "incentive_records" ADD CONSTRAINT "incentive_record_employee" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    );
    await queryRunner.query(
      `ALTER TABLE "incentive_records" ADD CONSTRAINT "incentiveSetting" FOREIGN KEY ("incentive_setting_id") REFERENCES "incentive_settings"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "incentive_records" DROP CONSTRAINT "incentiveSetting"`,
    );
    await queryRunner.query(
      `ALTER TABLE "incentive_records" DROP CONSTRAINT "incentive_record_employee"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ALTER COLUMN "extra_rate_per" SET DEFAULT 1.5`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."activity_record_settings_incentive_name_enum_old" AS ENUM('meal', 'perfect attendance', 'sucker planting', 'sucker harvest', 'fruit harvest', 'referral', 'long service')`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ALTER COLUMN "incentive_name" TYPE "public"."activity_record_settings_incentive_name_enum_old" USING "incentive_name"::"text"::"public"."activity_record_settings_incentive_name_enum_old"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."activity_record_settings_incentive_name_enum"`,
    );
    await queryRunner.query(
      `ALTER TYPE "public"."activity_record_settings_incentive_name_enum_old" RENAME TO "activity_record_settings_incentive_name_enum"`,
    );
    await queryRunner.query(
      `ALTER TABLE "incentive_settings" DROP COLUMN "period"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."incentive_settings_period_enum"`,
    );
    await queryRunner.query(`DROP TABLE "blocks"`);
    await queryRunner.query(`DROP TABLE "incentive_records"`);
  }
}