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

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

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "ot_records" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "date" TIMESTAMP NOT NULL, "hour" numeric(20,6) NOT NULL, "rate_per" numeric(20,6) NOT NULL, "daily_rate" numeric(20,6) NOT NULL, "employee_id" uuid, CONSTRAINT "PK_97a35872b95837fa955784f153c" PRIMARY KEY ("id"))`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."incentive_settings_name_enum" AS ENUM('meal', 'perfect attendance', 'sucker planting', 'sucker harvest', 'fruit harvest', 'referral', 'long service')`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."incentive_settings_type_enum" AS ENUM('PERCENTAGE', 'FIXED_AMOUNT')`,
    );
    await queryRunner.query(
      `CREATE TABLE "incentive_settings" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "name" "public"."incentive_settings_name_enum" NOT NULL, "is_activated" boolean NOT NULL DEFAULT true, "amount" numeric(20,6) NOT NULL DEFAULT '0', "threshold" numeric(20,6) NOT NULL DEFAULT '0', "type" "public"."incentive_settings_type_enum" NOT NULL DEFAULT 'FIXED_AMOUNT', CONSTRAINT "PK_7c808dbfbd885481d388482f16c" PRIMARY KEY ("id"))`,
    );

    await queryRunner.query(
      `CREATE TABLE "public_holidays" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "date" TIMESTAMP NOT NULL, "is_holiday" boolean NOT NULL DEFAULT true, CONSTRAINT "UQ_7599e8969de9ac9e64a3d536455" UNIQUE ("date"), CONSTRAINT "PK_e959831bb7c79c39cc58207c122" PRIMARY KEY ("id"))`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "rate_threshold"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "is_incentive_available"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "incentive"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "incentive_threshold"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "incentive_type"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."activity_record_settings_incentive_type_enum"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" DROP COLUMN "meal_allowance_amount"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" DROP COLUMN "meal_allowance_threshold"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "is_activated" boolean NOT NULL DEFAULT true`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "activate_until" TIMESTAMP`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."activity_record_settings_incentive_name_enum" AS ENUM('meal', 'perfect attendence', 'sucker planting', 'sucker harvest', 'fruit harvest', 'referral', 'long service')`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "incentive_name" "public"."activity_record_settings_incentive_name_enum"`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" ADD "referral_by" character varying`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" ADD "is_referral_fee_paid" boolean`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" ADD "referral_fee_paid_at" TIMESTAMP`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" ADD "is_activated" boolean NOT NULL DEFAULT true`,
    );
    await queryRunner.query(
      `ALTER TABLE "users" ADD CONSTRAINT "UQ_51b8b26ac168fbe7d6f5653e6cf" UNIQUE ("name")`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ALTER COLUMN "extra_rate_per" SET DEFAULT '1.5'`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_records" ADD CONSTRAINT "ot_record_employee" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "ot_records" DROP CONSTRAINT "ot_record_employee"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ALTER COLUMN "extra_rate_per" SET DEFAULT 1.5`,
    );
    await queryRunner.query(
      `ALTER TABLE "users" DROP CONSTRAINT "UQ_51b8b26ac168fbe7d6f5653e6cf"`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" DROP COLUMN "is_activated"`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" DROP COLUMN "referral_fee_paid_at"`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" DROP COLUMN "is_referral_fee_paid"`,
    );
    await queryRunner.query(
      `ALTER TABLE "employees" DROP COLUMN "referral_by"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "incentive_name"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."activity_record_settings_incentive_name_enum"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "activate_until"`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" DROP COLUMN "is_activated"`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ADD "meal_allowance_threshold" numeric(20,6) NOT NULL DEFAULT '3'`,
    );
    await queryRunner.query(
      `ALTER TABLE "ot_settings" ADD "meal_allowance_amount" numeric(20,6) NOT NULL DEFAULT '5'`,
    );
    await queryRunner.query(
      `CREATE TYPE "public"."activity_record_settings_incentive_type_enum" AS ENUM('PERCENTAGE', 'FIXED_AMOUNT', 'ON_DECIDE')`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "incentive_type" "public"."activity_record_settings_incentive_type_enum" NOT NULL DEFAULT 'FIXED_AMOUNT'`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "incentive_threshold" numeric(20,6) NOT NULL DEFAULT '0'`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "incentive" numeric(20,6) NOT NULL DEFAULT '0'`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "is_incentive_available" boolean NOT NULL DEFAULT false`,
    );
    await queryRunner.query(
      `ALTER TABLE "activity_record_settings" ADD "rate_threshold" numeric(20,6) NOT NULL DEFAULT '0'`,
    );
    await queryRunner.query(`DROP TABLE "public_holidays"`);
    await queryRunner.query(`DROP TABLE "incentive_settings"`);
    await queryRunner.query(
      `DROP TYPE "public"."incentive_settings_type_enum"`,
    );
    await queryRunner.query(
      `DROP TYPE "public"."incentive_settings_name_enum"`,
    );
    await queryRunner.query(`DROP TABLE "ot_records"`);
  }
}