diff --git a/apps/api/drizzle/0000_whole_glorian.sql b/apps/api/drizzle/0000_whole_glorian.sql index f191c51d..ced0030d 100644 --- a/apps/api/drizzle/0000_whole_glorian.sql +++ b/apps/api/drizzle/0000_whole_glorian.sql @@ -1,56 +1,96 @@ -CREATE TABLE "daily_data" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "user_id" varchar(26) NOT NULL, - "date" date NOT NULL, - "time_spent" integer NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL +CREATE TABLE IF NOT EXISTS "users" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "name" text NOT NULL, + "email" text NOT NULL, + "password" text NOT NULL, + "profile_picture" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "users_name_unique" UNIQUE("name"), + CONSTRAINT "users_email_unique" UNIQUE("email") ); + --> statement-breakpoint -CREATE TABLE "files" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "project_id" varchar(26) NOT NULL, - "language_id" varchar(26) NOT NULL, - "name" text NOT NULL, - "path" text NOT NULL, - "time_spent" integer DEFAULT 0 NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL + +CREATE TABLE IF NOT EXISTS "daily_data" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "user_id" varchar(26) NOT NULL, + "date" date NOT NULL, + "time_spent" integer NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL ); + --> statement-breakpoint -CREATE TABLE "languages" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "daily_data_id" varchar(26) NOT NULL, - "language_slug" text NOT NULL, - "time_spent" integer DEFAULT 0 NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL + +CREATE TABLE IF NOT EXISTS "languages" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "daily_data_id" varchar(26) NOT NULL, + "language_slug" text NOT NULL, + "time_spent" integer DEFAULT 0 NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint -CREATE TABLE "projects" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "daily_data_id" varchar(26) NOT NULL, - "name" text NOT NULL, - "path" text NOT NULL, - "time_spent" integer DEFAULT 0 NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL + +CREATE TABLE IF NOT EXISTS "projects" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "daily_data_id" varchar(26) NOT NULL, + "name" text NOT NULL, + "path" text NOT NULL, + "time_spent" integer DEFAULT 0 NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint -CREATE TABLE "users" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "name" text NOT NULL, - "email" text NOT NULL, - "password" text NOT NULL, - "profile_picture" text NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL, - CONSTRAINT "users_name_unique" UNIQUE("name"), - CONSTRAINT "users_email_unique" UNIQUE("email") + +CREATE TABLE IF NOT EXISTS "files" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "project_id" varchar(26) NOT NULL, + "language_id" varchar(26) NOT NULL, + "name" text NOT NULL, + "path" text NOT NULL, + "time_spent" integer DEFAULT 0 NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint -ALTER TABLE "daily_data" ADD CONSTRAINT "daily_data_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "files" ADD CONSTRAINT "files_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "files" ADD CONSTRAINT "files_language_id_languages_id_fk" FOREIGN KEY ("language_id") REFERENCES "public"."languages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "languages" ADD CONSTRAINT "languages_daily_data_id_daily_data_id_fk" FOREIGN KEY ("daily_data_id") REFERENCES "public"."daily_data"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "projects" ADD CONSTRAINT "projects_daily_data_id_daily_data_id_fk" FOREIGN KEY ("daily_data_id") REFERENCES "public"."daily_data"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file + +DO $$ BEGIN + ALTER TABLE "daily_data" ADD CONSTRAINT "daily_data_user_id_users_id_fk" + FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint + +DO $$ BEGIN + ALTER TABLE "languages" ADD CONSTRAINT "languages_daily_data_id_daily_data_id_fk" + FOREIGN KEY ("daily_data_id") REFERENCES "public"."daily_data"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint + +DO $$ BEGIN + ALTER TABLE "projects" ADD CONSTRAINT "projects_daily_data_id_daily_data_id_fk" + FOREIGN KEY ("daily_data_id") REFERENCES "public"."daily_data"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint + +DO $$ BEGIN + ALTER TABLE "files" ADD CONSTRAINT "files_project_id_projects_id_fk" + FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint + +DO $$ BEGIN + ALTER TABLE "files" ADD CONSTRAINT "files_language_id_languages_id_fk" + FOREIGN KEY ("language_id") REFERENCES "public"."languages"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; \ No newline at end of file diff --git a/apps/api/drizzle/0001_robust_wallflower.sql b/apps/api/drizzle/0001_robust_wallflower.sql index 14860271..26cd1b6c 100644 --- a/apps/api/drizzle/0001_robust_wallflower.sql +++ b/apps/api/drizzle/0001_robust_wallflower.sql @@ -1,11 +1,21 @@ -CREATE INDEX "daily_data_user_id_index" ON "daily_data" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "daily_data_date_index" ON "daily_data" USING btree ("date");--> statement-breakpoint -CREATE INDEX "project_id_index" ON "files" USING btree ("project_id");--> statement-breakpoint -CREATE INDEX "language_id_index" ON "files" USING btree ("language_id");--> statement-breakpoint -CREATE INDEX "file_name_idx" ON "files" USING btree ("name");--> statement-breakpoint -CREATE INDEX "file_path_idx" ON "files" USING btree ("path");--> statement-breakpoint -CREATE INDEX "language_daily_data_id_index" ON "languages" USING btree ("daily_data_id");--> statement-breakpoint -CREATE INDEX "language_slug_index" ON "languages" USING btree ("language_slug");--> statement-breakpoint -CREATE INDEX "project_daily_data_id_index" ON "projects" USING btree ("daily_data_id");--> statement-breakpoint -CREATE INDEX "project_name_index" ON "projects" USING btree ("name");--> statement-breakpoint -CREATE INDEX "project_path_index" ON "projects" USING btree ("path"); \ No newline at end of file +CREATE INDEX IF NOT EXISTS "daily_data_user_id_index" ON "daily_data" USING btree ("user_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "daily_data_date_index" ON "daily_data" USING btree ("date"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "project_id_index" ON "files" USING btree ("project_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "language_id_index" ON "files" USING btree ("language_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "file_name_idx" ON "files" USING btree ("name"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "file_path_idx" ON "files" USING btree ("path"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "language_daily_data_id_index" ON "languages" USING btree ("daily_data_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "language_slug_index" ON "languages" USING btree ("language_slug"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "project_daily_data_id_index" ON "projects" USING btree ("daily_data_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "project_name_index" ON "projects" USING btree ("name"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "project_path_index" ON "projects" USING btree ("path"); \ No newline at end of file diff --git a/apps/api/drizzle/0002_known_reaper.sql b/apps/api/drizzle/0002_known_reaper.sql index 7bb77320..13979065 100644 --- a/apps/api/drizzle/0002_known_reaper.sql +++ b/apps/api/drizzle/0002_known_reaper.sql @@ -1,4 +1,7 @@ -DROP INDEX "file_name_idx";--> statement-breakpoint -DROP INDEX "file_path_idx";--> statement-breakpoint -CREATE INDEX "file_name_index" ON "files" USING btree ("name");--> statement-breakpoint -CREATE INDEX "file_path_index" ON "files" USING btree ("path"); \ No newline at end of file +DROP INDEX IF EXISTS "file_name_idx"; +--> statement-breakpoint +DROP INDEX IF EXISTS "file_path_idx"; +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "file_name_index" ON "files" USING btree ("name"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "file_path_index" ON "files" USING btree ("path"); \ No newline at end of file diff --git a/apps/api/drizzle/0003_first_pepper_potts.sql b/apps/api/drizzle/0003_first_pepper_potts.sql index dfa29a46..00cdeec1 100644 --- a/apps/api/drizzle/0003_first_pepper_potts.sql +++ b/apps/api/drizzle/0003_first_pepper_potts.sql @@ -1,4 +1,5 @@ -ALTER TABLE "users" ADD COLUMN "google_id" text;--> statement-breakpoint -ALTER TABLE "users" ADD COLUMN "google_email" text;--> statement-breakpoint -ALTER TABLE "users" ADD COLUMN "auth_method" text DEFAULT 'email';--> statement-breakpoint -ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email"); \ No newline at end of file +ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "google_id" text; +--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "google_email" text; +--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "auth_method" text DEFAULT 'email'; \ No newline at end of file diff --git a/apps/api/drizzle/0004_groovy_weapon_omega.sql b/apps/api/drizzle/0004_groovy_weapon_omega.sql index 6c42a10f..2287f668 100644 --- a/apps/api/drizzle/0004_groovy_weapon_omega.sql +++ b/apps/api/drizzle/0004_groovy_weapon_omega.sql @@ -1,2 +1,20 @@ -ALTER TABLE "users" DROP CONSTRAINT "users_google_email_unique";--> statement-breakpoint -ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id"); \ No newline at end of file +DO $$ +BEGIN + BEGIN + ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique"; + EXCEPTION + WHEN undefined_object THEN NULL; + END; + + BEGIN + ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_id_unique"; + EXCEPTION + WHEN undefined_object THEN NULL; + END; + + ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id"); + +EXCEPTION + WHEN duplicate_object OR duplicate_table OR unique_violation THEN + NULL; +END $$; \ No newline at end of file diff --git a/apps/api/drizzle/0005_legal_tattoo.sql b/apps/api/drizzle/0005_legal_tattoo.sql index 86577025..8b757892 100644 --- a/apps/api/drizzle/0005_legal_tattoo.sql +++ b/apps/api/drizzle/0005_legal_tattoo.sql @@ -1 +1,8 @@ -ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email"); \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique"; + ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email"); +EXCEPTION + WHEN duplicate_object THEN NULL; + WHEN undefined_object THEN NULL; +END $$; \ No newline at end of file diff --git a/apps/api/drizzle/0006_aromatic_shiver_man.sql b/apps/api/drizzle/0006_aromatic_shiver_man.sql index 695cec40..ea5b6259 100644 --- a/apps/api/drizzle/0006_aromatic_shiver_man.sql +++ b/apps/api/drizzle/0006_aromatic_shiver_man.sql @@ -1 +1,2 @@ -ALTER TABLE "users" ADD COLUMN "email_verified_at" timestamp DEFAULT NULL; \ No newline at end of file +ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "email_verified_at" timestamp DEFAULT NULL; +--> statement-breakpoint diff --git a/apps/api/drizzle/0007_default_email_verification.sql b/apps/api/drizzle/0007_default_email_verification.sql index 902def63..05a5159d 100644 --- a/apps/api/drizzle/0007_default_email_verification.sql +++ b/apps/api/drizzle/0007_default_email_verification.sql @@ -1 +1 @@ -UPDATE users SET email_verified_at = NOW(); \ No newline at end of file +UPDATE users SET email_verified_at = NOW() WHERE email_verified_at IS NULL; \ No newline at end of file diff --git a/apps/api/drizzle/0008_pale_mach_iv.sql b/apps/api/drizzle/0008_pale_mach_iv.sql index ba0335ba..e4f9dbb7 100644 --- a/apps/api/drizzle/0008_pale_mach_iv.sql +++ b/apps/api/drizzle/0008_pale_mach_iv.sql @@ -1,10 +1,10 @@ -CREATE TABLE "pending_registrations" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "name" text NOT NULL, - "email" text NOT NULL, - "password" text NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL, - CONSTRAINT "pending_registrations_name_unique" UNIQUE("name"), - CONSTRAINT "pending_registrations_email_unique" UNIQUE("email") -); +CREATE TABLE IF NOT EXISTS "pending_registrations" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "name" text NOT NULL, + "email" text NOT NULL, + "password" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "pending_registrations_name_unique" UNIQUE("name"), + CONSTRAINT "pending_registrations_email_unique" UNIQUE("email") +); \ No newline at end of file diff --git a/apps/api/drizzle/0009_old_toad_men.sql b/apps/api/drizzle/0009_old_toad_men.sql index 4e177938..e5ddace0 100644 --- a/apps/api/drizzle/0009_old_toad_men.sql +++ b/apps/api/drizzle/0009_old_toad_men.sql @@ -1 +1 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "code" varchar(8) NOT NULL; \ No newline at end of file +ALTER TABLE "pending_registrations" ADD COLUMN IF NOT EXISTS "code" varchar(8) NOT NULL; \ No newline at end of file diff --git a/apps/api/drizzle/0010_naive_groot.sql b/apps/api/drizzle/0010_naive_groot.sql index 5a0fbe77..43353db8 100644 --- a/apps/api/drizzle/0010_naive_groot.sql +++ b/apps/api/drizzle/0010_naive_groot.sql @@ -1 +1 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "expires_at" timestamp DEFAULT now() + interval '30 minutes' NOT NULL; \ No newline at end of file +ALTER TABLE "pending_registrations" ADD COLUMN IF NOT EXISTS "expires_at" timestamp DEFAULT (now() + interval '30 minutes') NOT NULL; \ No newline at end of file diff --git a/apps/api/drizzle/0011_chemical_archangel.sql b/apps/api/drizzle/0011_chemical_archangel.sql index 851f7049..bd1e4611 100644 --- a/apps/api/drizzle/0011_chemical_archangel.sql +++ b/apps/api/drizzle/0011_chemical_archangel.sql @@ -1 +1,7 @@ -ALTER TABLE "users" RENAME COLUMN "password" TO "hashed_password"; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "users" RENAME COLUMN "password" TO "hashed_password"; +EXCEPTION + WHEN undefined_column OR duplicate_column THEN NULL; +END $$; +--> statement-breakpoint \ No newline at end of file diff --git a/apps/api/drizzle/0012_dry_night_thrasher.sql b/apps/api/drizzle/0012_dry_night_thrasher.sql index 980ccbc7..d6fdb134 100644 --- a/apps/api/drizzle/0012_dry_night_thrasher.sql +++ b/apps/api/drizzle/0012_dry_night_thrasher.sql @@ -1 +1,6 @@ -ALTER TABLE "pending_registrations" RENAME COLUMN "password" TO "hashed_password"; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "pending_registrations" RENAME COLUMN "password" TO "hashed_password"; +EXCEPTION + WHEN undefined_column OR duplicate_column THEN NULL; +END $$; \ No newline at end of file diff --git a/apps/api/drizzle/0013_smart_bromley.sql b/apps/api/drizzle/0013_smart_bromley.sql index 9b7cd7ab..e0a78d5f 100644 --- a/apps/api/drizzle/0013_smart_bromley.sql +++ b/apps/api/drizzle/0013_smart_bromley.sql @@ -1,15 +1,23 @@ -CREATE TABLE "password_resets" ( - "id" varchar(26) PRIMARY KEY NOT NULL, - "user_id" varchar(26) NOT NULL, - "email" text NOT NULL, - "code" varchar(8) NOT NULL, - "attempts" integer DEFAULT 0 NOT NULL, - "expires_at" timestamp DEFAULT now() + interval '15 minutes' NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp DEFAULT now() NOT NULL, - CONSTRAINT "password_resets_email_unique" UNIQUE("email") +CREATE TABLE IF NOT EXISTS "password_resets" ( + "id" varchar(26) PRIMARY KEY NOT NULL, + "user_id" varchar(26) NOT NULL, + "email" text NOT NULL, + "code" varchar(8) NOT NULL, + "attempts" integer DEFAULT 0 NOT NULL, + "expires_at" timestamp DEFAULT (now() + interval '15 minutes') NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "password_resets_email_unique" UNIQUE("email") ); --> statement-breakpoint -ALTER TABLE "password_resets" ADD CONSTRAINT "password_resets_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "password_resets_user_id_index" ON "password_resets" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "password_resets_email_index" ON "password_resets" USING btree ("email"); \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "password_resets" ADD CONSTRAINT "password_resets_user_id_users_id_fk" + FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; +EXCEPTION + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "password_resets_user_id_index" ON "password_resets" USING btree ("user_id"); +--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "password_resets_email_index" ON "password_resets" USING btree ("email"); \ No newline at end of file diff --git a/apps/api/drizzle/0014_new_trauma.sql b/apps/api/drizzle/0014_new_trauma.sql index 68c09d33..a410ba88 100644 --- a/apps/api/drizzle/0014_new_trauma.sql +++ b/apps/api/drizzle/0014_new_trauma.sql @@ -1 +1 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "attempts" integer DEFAULT 0 NOT NULL; \ No newline at end of file +ALTER TABLE "pending_registrations" ADD COLUMN IF NOT EXISTS "attempts" integer DEFAULT 0 NOT NULL; \ No newline at end of file