import { MigrationInterface, QueryRunner } from 'typeorm'; export class Initial1347313160630 implements MigrationInterface { name = 'Initial1347313160630 '; public async up(queryRunner: QueryRunner): Promise { // We don't want to run this migration in production because we deployed the // app with typeorm's synchronize set to true, so the db's schema has // already been initialized. // We might want to change databases in production in the future. In that // case, we'll just need to set the TYPEORM_RUN_INITIAL_MIGRATION env // variable to true for this migration to run properly. // @WARNING: the the ids of the keys here are not guaranteed be the same as // the ones in production await queryRunner.query( `CREATE TABLE "hunts" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "firebaseId" character varying NOT NULL, "email" character varying NOT NULL, "url" character varying NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_663645859ac175502083c9e1cea" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "leads" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "firebaseId" character varying, "email" character varying NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_cd102ed7a9a4ca7d4d8bfeba406" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TYPE "public"."pages_source_enum" AS ENUM('GOOGLE_SHOPPING')` ); await queryRunner.query( `CREATE TABLE "pages" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "firebaseId" character varying NOT NULL, "availability" boolean, "distributor" character varying, "distributorSKU" character varying, "img" character varying, "name" character varying, "productFirebaseId" character varying, "productSKU" character varying, "price" double precision NOT NULL, "retailer" character varying NOT NULL, "url" character varying NOT NULL, "urlQuery" character varying, "urlOriginal" character varying, "lowestPricePageId" uuid, "asin" character varying, "dimensions" character varying, "colorCode" character varying, "googleShoppingIDs" character varying array, "annotations" character varying, "description" character varying, "discoverable" boolean, "hasReviews" boolean, "featured" boolean, "source" "public"."pages_source_enum", "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_8f21ed625aa34c8391d636b7d3b" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE UNIQUE INDEX "IDX_7792456bb765d5a5667e02896c" ON "pages" ("firebaseId") ` ); await queryRunner.query( `CREATE TYPE "public"."products_source_enum" AS ENUM('GOOGLE_SHOPPING')` ); await queryRunner.query( `CREATE TABLE "products" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "firebaseId" character varying NOT NULL, "googleShoppingIDs" character varying array, "source" "public"."products_source_enum", "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_0806c755e0aca124e67c0cf6d7d" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE UNIQUE INDEX "IDX_2e85b7a897a0d8476c802b1456" ON "products" ("firebaseId") ` ); await queryRunner.query( `CREATE TABLE "users" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "username" character varying, "passwordAuthId" uuid, "anonymousAuthId" uuid, "refreshTokenVersion" character varying, CONSTRAINT "PK_a3ffb1c0c8416b9fc6f907b7433" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "time_based_one_time_password" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "expiresAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" uuid NOT NULL, "otpAlgorithmversion" integer NOT NULL, "otpSalt" character varying NOT NULL, "otpSaltencoding" character varying NOT NULL, "otpHash" character varying NOT NULL, "otpIterations" integer NOT NULL, "otpLength" integer NOT NULL, "otpHashfunction" character varying NOT NULL, CONSTRAINT "PK_5fee76b70d4c50fc6e091186a60" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "reset_password_request" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "expiresAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" uuid NOT NULL, "keyAlgorithmversion" integer NOT NULL, "keySalt" character varying NOT NULL, "keySaltencoding" character varying NOT NULL, "keyHash" character varying NOT NULL, "keyIterations" integer NOT NULL, "keyLength" integer NOT NULL, "keyHashfunction" character varying NOT NULL, CONSTRAINT "PK_74675f940551b34f6e321247b81" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "password_authentication_strategy" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "email" character varying NOT NULL, "isVerified" boolean NOT NULL DEFAULT false, "passwordAlgorithmversion" integer NOT NULL, "passwordSalt" character varying NOT NULL, "passwordSaltencoding" character varying NOT NULL, "passwordHash" character varying NOT NULL, "passwordIterations" integer NOT NULL, "passwordLength" integer NOT NULL, "passwordHashfunction" character varying NOT NULL, CONSTRAINT "UQ_1ab398c5fc220f0219d01b11faa" UNIQUE ("email"), CONSTRAINT "PK_8ecc03fd138eba6eee18f9f42e8" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "anonymous_authentication_strategy" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "lastSignedIn" TIMESTAMP WITH TIME ZONE NOT NULL, CONSTRAINT "PK_c38649b7e125a1b329f05dec3a0" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "product_lists" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "createdById" uuid NOT NULL, CONSTRAINT "PK_c51754b7fd63ddf8631382838df" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "clicks" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "firebaseId" character varying NOT NULL, "pageFirebaseId" character varying, "productFirebaseId" character varying, "refPageFirebaseId" character varying, "retailer" character varying, "url" character varying, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_7765d7ffdeb0ed2675651020814" PRIMARY KEY ("id"))` ); await queryRunner.query( `CREATE TABLE "product_lists_products_products" ("productListsId" uuid NOT NULL, "productsId" uuid NOT NULL, CONSTRAINT "PK_19b495c777c04d04ab565fbfe2b" PRIMARY KEY ("productListsId", "productsId"))` ); await queryRunner.query( `CREATE INDEX "IDX_49086a8d2287fc05e0727e9920" ON "product_lists_products_products" ("productListsId") ` ); await queryRunner.query( `CREATE INDEX "IDX_ba731e91801bb2e09d06eb1c93" ON "product_lists_products_products" ("productsId") ` ); await queryRunner.query( `CREATE TABLE "product_lists_collaborators_users" ("productListsId" uuid NOT NULL, "usersId" uuid NOT NULL, CONSTRAINT "PK_1f97ba02687a0b8bff04daf6006" PRIMARY KEY ("productListsId", "usersId"))` ); await queryRunner.query( `CREATE INDEX "IDX_d4b88cd9cc7a36b20868e1e56f" ON "product_lists_collaborators_users" ("productListsId") ` ); await queryRunner.query( `CREATE INDEX "IDX_16bb8075ec42e21459d3c0b208" ON "product_lists_collaborators_users" ("usersId") ` ); await queryRunner.query( `ALTER TABLE "pages" ADD CONSTRAINT "FK_9f429f6ba897d1d5c9a864473e5" FOREIGN KEY ("productFirebaseId") REFERENCES "products"("firebaseId") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "pages" ADD CONSTRAINT "FK_fb8fb06f78c6ad41ab50862fbbf" FOREIGN KEY ("lowestPricePageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "time_based_one_time_password" ADD CONSTRAINT "FK_394d44d45fe47899c6936958c9e" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION` ); await queryRunner.query( `ALTER TABLE "reset_password_request" ADD CONSTRAINT "FK_f49e9196528497e5762e5fac23d" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION` ); await queryRunner.query( `ALTER TABLE "product_lists" ADD CONSTRAINT "FK_2ba60190ed62280ec99c6824f93" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION` ); await queryRunner.query( `ALTER TABLE "clicks" ADD CONSTRAINT "FK_05e834ad64d964212b774c4bb15" FOREIGN KEY ("pageFirebaseId") REFERENCES "pages"("firebaseId") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "clicks" ADD CONSTRAINT "FK_4f4815299c3e3bfec434719f670" FOREIGN KEY ("productFirebaseId") REFERENCES "products"("firebaseId") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "clicks" ADD CONSTRAINT "FK_b77c095bad741ac381342d05931" FOREIGN KEY ("refPageFirebaseId") REFERENCES "pages"("firebaseId") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "product_lists_products_products" ADD CONSTRAINT "FK_49086a8d2287fc05e0727e9920e" FOREIGN KEY ("productListsId") REFERENCES "product_lists"("id") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "product_lists_products_products" ADD CONSTRAINT "FK_ba731e91801bb2e09d06eb1c93c" FOREIGN KEY ("productsId") REFERENCES "products"("id") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "product_lists_collaborators_users" ADD CONSTRAINT "FK_d4b88cd9cc7a36b20868e1e56fd" FOREIGN KEY ("productListsId") REFERENCES "product_lists"("id") ON DELETE CASCADE ON UPDATE CASCADE` ); await queryRunner.query( `ALTER TABLE "product_lists_collaborators_users" ADD CONSTRAINT "FK_16bb8075ec42e21459d3c0b2082" FOREIGN KEY ("usersId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE` ); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query( `ALTER TABLE "product_lists_collaborators_users" DROP CONSTRAINT "FK_16bb8075ec42e21459d3c0b2082"` ); await queryRunner.query( `ALTER TABLE "product_lists_collaborators_users" DROP CONSTRAINT "FK_d4b88cd9cc7a36b20868e1e56fd"` ); await queryRunner.query( `ALTER TABLE "product_lists_products_products" DROP CONSTRAINT "FK_ba731e91801bb2e09d06eb1c93c"` ); await queryRunner.query( `ALTER TABLE "product_lists_products_products" DROP CONSTRAINT "FK_49086a8d2287fc05e0727e9920e"` ); await queryRunner.query( `ALTER TABLE "clicks" DROP CONSTRAINT "FK_b77c095bad741ac381342d05931"` ); await queryRunner.query( `ALTER TABLE "clicks" DROP CONSTRAINT "FK_4f4815299c3e3bfec434719f670"` ); await queryRunner.query( `ALTER TABLE "clicks" DROP CONSTRAINT "FK_05e834ad64d964212b774c4bb15"` ); await queryRunner.query( `ALTER TABLE "product_lists" DROP CONSTRAINT "FK_2ba60190ed62280ec99c6824f93"` ); await queryRunner.query( `ALTER TABLE "reset_password_request" DROP CONSTRAINT "FK_f49e9196528497e5762e5fac23d"` ); await queryRunner.query( `ALTER TABLE "time_based_one_time_password" DROP CONSTRAINT "FK_394d44d45fe47899c6936958c9e"` ); await queryRunner.query( `ALTER TABLE "users" DROP CONSTRAINT "FK_8e6e2bc18c8f01680b4350d4a11"` ); await queryRunner.query( `ALTER TABLE "users" DROP CONSTRAINT "FK_2af040c64cb1b128fb66013ecbc"` ); await queryRunner.query( `ALTER TABLE "pages" DROP CONSTRAINT "FK_fb8fb06f78c6ad41ab50862fbbf"` ); await queryRunner.query( `ALTER TABLE "pages" DROP CONSTRAINT "FK_9f429f6ba897d1d5c9a864473e5"` ); await queryRunner.query( `DROP INDEX "public"."IDX_16bb8075ec42e21459d3c0b208"` ); await queryRunner.query( `DROP INDEX "public"."IDX_d4b88cd9cc7a36b20868e1e56f"` ); await queryRunner.query(`DROP TABLE "product_lists_collaborators_users"`); await queryRunner.query( `DROP INDEX "public"."IDX_ba731e91801bb2e09d06eb1c93"` ); await queryRunner.query( `DROP INDEX "public"."IDX_49086a8d2287fc05e0727e9920"` ); await queryRunner.query(`DROP TABLE "product_lists_products_products"`); await queryRunner.query(`DROP TABLE "clicks"`); await queryRunner.query(`DROP TABLE "product_lists"`); await queryRunner.query(`DROP TABLE "anonymous_authentication_strategy"`); await queryRunner.query(`DROP TABLE "password_authentication_strategy"`); await queryRunner.query(`DROP TABLE "reset_password_request"`); await queryRunner.query(`DROP TABLE "time_based_one_time_password"`); await queryRunner.query(`DROP TABLE "users"`); await queryRunner.query( `DROP INDEX "public"."IDX_2e85b7a897a0d8476c802b1456"` ); await queryRunner.query(`DROP TABLE "products"`); await queryRunner.query(`DROP TYPE "public"."products_source_enum"`); await queryRunner.query( `DROP INDEX "public"."IDX_7792456bb765d5a5667e02896c"` ); await queryRunner.query(`DROP TABLE "pages"`); await queryRunner.query(`DROP TYPE "public"."pages_source_enum"`); await queryRunner.query(`DROP TABLE "leads"`); await queryRunner.query(`DROP TABLE "hunts"`); } }