import { MigrationInterface, QueryRunner } from 'typeorm'

export class AddMenuItemEntity1695218149444 implements MigrationInterface {
	name = 'AddMenuItemEntity1695218149444'

	public async up(queryRunner: QueryRunner): Promise<void> {
		await queryRunner.query(`CREATE TYPE "public"."menu_item_unit_enum" AS ENUM('ml', 'l', 'mg', 'g', 'kg', 'pcs')`)
		await queryRunner.query(
			`CREATE TABLE "menu_item" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "name" character varying(60) NOT NULL, "description" character varying(255), "price" numeric NOT NULL, "currency" character varying(3) NOT NULL, "amount" numeric NOT NULL, "unit" "public"."menu_item_unit_enum" NOT NULL DEFAULT 'pcs', "allergens" text, "coverUrl" text, "isArchived" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_722c4de0accbbfafc77947a8556" PRIMARY KEY ("id"))`,
		)
		await queryRunner.query(
			`CREATE TABLE "menu_item_category" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "sortOrder" integer NOT NULL, "visible" boolean NOT NULL DEFAULT true, "itemId" uuid NOT NULL, "categoryId" uuid NOT NULL, CONSTRAINT "PK_0d7401f822dda4303ecdeea2ca1" PRIMARY KEY ("id"))`,
		)
		await queryRunner.query(
			`ALTER TABLE "menu_item_category" ADD CONSTRAINT "FK_4e009e14b2d9750ef540a97400b" FOREIGN KEY ("itemId") REFERENCES "menu_item"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
		)
		await queryRunner.query(
			`ALTER TABLE "menu_item_category" ADD CONSTRAINT "FK_bbb76ef9458fbf2194b615fe813" FOREIGN KEY ("categoryId") REFERENCES "category"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
		)
	}

	public async down(queryRunner: QueryRunner): Promise<void> {
		await queryRunner.query(`ALTER TABLE "menu_item_category" DROP CONSTRAINT "FK_bbb76ef9458fbf2194b615fe813"`)
		await queryRunner.query(`ALTER TABLE "menu_item_category" DROP CONSTRAINT "FK_4e009e14b2d9750ef540a97400b"`)
		await queryRunner.query(`DROP TABLE "menu_item_category"`)
		await queryRunner.query(`DROP TABLE "menu_item"`)
		await queryRunner.query(`DROP TYPE "public"."menu_item_unit_enum"`)
	}
}
