From 4d8d38ed728bbada69c02c1e40b3a27fc7b9149d Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 22:22:10 +0100 Subject: [PATCH 1/7] fix: sql migrations - added error handling to the database migrations files --- apps/api/drizzle/0000_whole_glorian.sql | 122 ++++++++++-------- apps/api/drizzle/0001_robust_wallflower.sql | 32 +++-- apps/api/drizzle/0002_known_reaper.sql | 19 ++- apps/api/drizzle/0003_first_pepper_potts.sql | 33 ++++- apps/api/drizzle/0004_groovy_weapon_omega.sql | 14 +- apps/api/drizzle/0005_legal_tattoo.sql | 6 +- apps/api/drizzle/0006_aromatic_shiver_man.sql | 8 +- .../0007_default_email_verification.sql | 5 +- apps/api/drizzle/0008_pale_mach_iv.sql | 28 ++-- apps/api/drizzle/0009_old_toad_men.sql | 9 +- apps/api/drizzle/0010_naive_groot.sql | 9 +- apps/api/drizzle/0011_chemical_archangel.sql | 11 +- apps/api/drizzle/0012_dry_night_thrasher.sql | 11 +- apps/api/drizzle/0013_smart_bromley.sql | 40 +++--- apps/api/drizzle/0014_new_trauma.sql | 8 +- 15 files changed, 245 insertions(+), 110 deletions(-) diff --git a/apps/api/drizzle/0000_whole_glorian.sql b/apps/api/drizzle/0000_whole_glorian.sql index f191c51d..b38d91d5 100644 --- a/apps/api/drizzle/0000_whole_glorian.sql +++ b/apps/api/drizzle/0000_whole_glorian.sql @@ -1,56 +1,66 @@ -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 -); ---> 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 -); ---> 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 -); ---> 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 -); ---> 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") -); ---> 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 + 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 + ); + --> 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 + ); + --> 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 + ); + --> 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 + ); + --> 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") + ); + --> 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;--> statement-breakpoint + +EXCEPTION + WHEN duplicate_table THEN + NULL; + + 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..4f8bbc5b 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 +DO $$ +BEGIN + 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");--> statement-breakpoint + +EXCEPTION + WHEN duplicate_table THEN + NULL; + + WHEN duplicate_object THEN + NULL; +END $$; diff --git a/apps/api/drizzle/0002_known_reaper.sql b/apps/api/drizzle/0002_known_reaper.sql index 7bb77320..d679328c 100644 --- a/apps/api/drizzle/0002_known_reaper.sql +++ b/apps/api/drizzle/0002_known_reaper.sql @@ -1,4 +1,15 @@ -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 +DO $$ +BEGIN + 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");--> statement-breakpoint +EXCEPTION + WHEN undefined_object THEN + NULL; + WHEN duplicate_table THEN + NULL; + + WHEN duplicate_object THEN + NULL; +END $$; diff --git a/apps/api/drizzle/0003_first_pepper_potts.sql b/apps/api/drizzle/0003_first_pepper_potts.sql index dfa29a46..f6402fd1 100644 --- a/apps/api/drizzle/0003_first_pepper_potts.sql +++ b/apps/api/drizzle/0003_first_pepper_potts.sql @@ -1,4 +1,29 @@ -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 +DO $$ +BEGIN + 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';--> statement-breakpoint + ALTER TABLE "users" DROP CONSTRAINT "users_google_email_unique";--> statement-breakpoint + +EXCEPTION + WHEN duplicate_table THEN + NULL; + WHEN duplicate_object THEN + NULL; + WHEN unique_violation THEN + NULL; + WHEN undefined_object THEN + NULL; +END$$; + +DO $$ +BEGIN + ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email"); +EXCEPTION + WHEN duplicate_table THEN + NULL; + WHEN duplicate_object THEN + NULL; + WHEN unique_violation THEN + NULL; +END$$; \ 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..b314da22 100644 --- a/apps/api/drizzle/0004_groovy_weapon_omega.sql +++ b/apps/api/drizzle/0004_groovy_weapon_omega.sql @@ -1,2 +1,12 @@ -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 + ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique";--> statement-breakpoint + ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id");--> statement-breakpoint +EXCEPTION + WHEN duplicate_table THEN + NULL; + WHEN duplicate_object THEN + NULL; + WHEN unique_violation THEN + NULL; +END$$; diff --git a/apps/api/drizzle/0005_legal_tattoo.sql b/apps/api/drizzle/0005_legal_tattoo.sql index 86577025..eb09f258 100644 --- a/apps/api/drizzle/0005_legal_tattoo.sql +++ b/apps/api/drizzle/0005_legal_tattoo.sql @@ -1 +1,5 @@ -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";--> statement-breakpoint + ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email");--> statement-breakpoint +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..1ece8a15 100644 --- a/apps/api/drizzle/0006_aromatic_shiver_man.sql +++ b/apps/api/drizzle/0006_aromatic_shiver_man.sql @@ -1 +1,7 @@ -ALTER TABLE "users" ADD COLUMN "email_verified_at" timestamp DEFAULT NULL; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "users" ADD COLUMN "email_verified_at" timestamp DEFAULT NULL; +EXCEPTION + WHEN duplicate_column THEN + NULL; +END $$; \ No newline at end of file diff --git a/apps/api/drizzle/0007_default_email_verification.sql b/apps/api/drizzle/0007_default_email_verification.sql index 902def63..c8c4f219 100644 --- a/apps/api/drizzle/0007_default_email_verification.sql +++ b/apps/api/drizzle/0007_default_email_verification.sql @@ -1 +1,4 @@ -UPDATE users SET email_verified_at = NOW(); \ No newline at end of file +DO $$ +BEGIN + UPDATE users SET email_verified_at = NOW() WHERE email_verified_at IS NULL;--> statement-breakpoint +END $$; \ 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..737f6dd6 100644 --- a/apps/api/drizzle/0008_pale_mach_iv.sql +++ b/apps/api/drizzle/0008_pale_mach_iv.sql @@ -1,10 +1,18 @@ -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") -); +DO $$ +BEGIN + 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") + );--> statement-breakpoint + +EXCEPTION + WHEN duplicate_table THEN + NULL; + +END $$; diff --git a/apps/api/drizzle/0009_old_toad_men.sql b/apps/api/drizzle/0009_old_toad_men.sql index 4e177938..09522f12 100644 --- a/apps/api/drizzle/0009_old_toad_men.sql +++ b/apps/api/drizzle/0009_old_toad_men.sql @@ -1 +1,8 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "code" varchar(8) NOT NULL; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "pending_registrations" ADD COLUMN "code" varchar(8) NOT NULL;--> statement-breakpoint +EXCEPTION + WHEN duplicate_column THEN + NULL; + +END $$; diff --git a/apps/api/drizzle/0010_naive_groot.sql b/apps/api/drizzle/0010_naive_groot.sql index 5a0fbe77..4f27dee9 100644 --- a/apps/api/drizzle/0010_naive_groot.sql +++ b/apps/api/drizzle/0010_naive_groot.sql @@ -1 +1,8 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "expires_at" timestamp DEFAULT now() + interval '30 minutes' NOT NULL; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "pending_registrations" ADD COLUMN "expires_at" timestamp DEFAULT now() + interval '30 minutes' NOT NULL;--> statement-breakpoint +EXCEPTION + WHEN duplicate_column THEN + NULL; + +END $$; diff --git a/apps/api/drizzle/0011_chemical_archangel.sql b/apps/api/drizzle/0011_chemical_archangel.sql index 851f7049..d627972d 100644 --- a/apps/api/drizzle/0011_chemical_archangel.sql +++ b/apps/api/drizzle/0011_chemical_archangel.sql @@ -1 +1,10 @@ -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";--> statement-breakpoint +EXCEPTION + WHEN undefined_column THEN + NULL; + + WHEN duplicate_column THEN + NULL; +END $$; diff --git a/apps/api/drizzle/0012_dry_night_thrasher.sql b/apps/api/drizzle/0012_dry_night_thrasher.sql index 980ccbc7..b6a12a37 100644 --- a/apps/api/drizzle/0012_dry_night_thrasher.sql +++ b/apps/api/drizzle/0012_dry_night_thrasher.sql @@ -1 +1,10 @@ -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";--> statement-breakpoint +EXCEPTION + WHEN undefined_column THEN + NULL; + + WHEN duplicate_column THEN + NULL; +END $$; diff --git a/apps/api/drizzle/0013_smart_bromley.sql b/apps/api/drizzle/0013_smart_bromley.sql index 9b7cd7ab..d2ea81d2 100644 --- a/apps/api/drizzle/0013_smart_bromley.sql +++ b/apps/api/drizzle/0013_smart_bromley.sql @@ -1,15 +1,25 @@ -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") -); ---> 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 + 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") + ); + --> 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");--> statement-breakpoint +EXCEPTION + WHEN duplicate_table THEN + NULL; + WHEN duplicate_object THEN + NULL; + WHEN unique_violation THEN + NULL; +END$$; diff --git a/apps/api/drizzle/0014_new_trauma.sql b/apps/api/drizzle/0014_new_trauma.sql index 68c09d33..a4a662cd 100644 --- a/apps/api/drizzle/0014_new_trauma.sql +++ b/apps/api/drizzle/0014_new_trauma.sql @@ -1 +1,7 @@ -ALTER TABLE "pending_registrations" ADD COLUMN "attempts" integer DEFAULT 0 NOT NULL; \ No newline at end of file +DO $$ +BEGIN + ALTER TABLE "pending_registrations" ADD COLUMN "attempts" integer DEFAULT 0 NOT NULL;--> statement-breakpoint +EXCEPTION + WHEN duplicate_column THEN + NULL; +END$$; \ No newline at end of file From 38adcf2560f281c3c0e1f4d64ff813abdbf4c579 Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 22:32:32 +0100 Subject: [PATCH 2/7] fix: sql migration - fixed the formatting of the comments in the first migration file --- apps/api/drizzle/0000_whole_glorian.sql | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/apps/api/drizzle/0000_whole_glorian.sql b/apps/api/drizzle/0000_whole_glorian.sql index b38d91d5..e2c7bca4 100644 --- a/apps/api/drizzle/0000_whole_glorian.sql +++ b/apps/api/drizzle/0000_whole_glorian.sql @@ -7,8 +7,7 @@ BEGIN "time_spent" integer NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL - ); - --> statement-breakpoint + );--> statement-breakpoint CREATE TABLE "files" ( "id" varchar(26) PRIMARY KEY NOT NULL, "project_id" varchar(26) NOT NULL, @@ -18,8 +17,7 @@ BEGIN "time_spent" integer DEFAULT 0 NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL - ); - --> statement-breakpoint + );--> statement-breakpoint CREATE TABLE "languages" ( "id" varchar(26) PRIMARY KEY NOT NULL, "daily_data_id" varchar(26) NOT NULL, @@ -27,8 +25,7 @@ BEGIN "time_spent" integer DEFAULT 0 NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL - ); - --> statement-breakpoint + );--> statement-breakpoint CREATE TABLE "projects" ( "id" varchar(26) PRIMARY KEY NOT NULL, "daily_data_id" varchar(26) NOT NULL, @@ -37,8 +34,7 @@ BEGIN "time_spent" integer DEFAULT 0 NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL - ); - --> statement-breakpoint + );--> statement-breakpoint CREATE TABLE "users" ( "id" varchar(26) PRIMARY KEY NOT NULL, "name" text NOT NULL, @@ -49,8 +45,7 @@ BEGIN "updated_at" timestamp DEFAULT now() NOT NULL, CONSTRAINT "users_name_unique" UNIQUE("name"), CONSTRAINT "users_email_unique" UNIQUE("email") - ); - --> statement-breakpoint + );--> 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 @@ -63,4 +58,5 @@ EXCEPTION WHEN duplicate_object THEN NULL; + END $$; \ No newline at end of file From 9e1d1440cca3a7f18f0bc74e4b6c1cff525d8f31 Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 22:53:49 +0100 Subject: [PATCH 3/7] fix: sql migration - fixed the formatting in the first migration file --- apps/api/drizzle/0000_whole_glorian.sql | 148 +++++++++++++++--------- 1 file changed, 91 insertions(+), 57 deletions(-) diff --git a/apps/api/drizzle/0000_whole_glorian.sql b/apps/api/drizzle/0000_whole_glorian.sql index e2c7bca4..ced0030d 100644 --- a/apps/api/drizzle/0000_whole_glorian.sql +++ b/apps/api/drizzle/0000_whole_glorian.sql @@ -1,62 +1,96 @@ -DO $$ -BEGIN - 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 - );--> 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 - );--> 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 - );--> 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 - );--> 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") - );--> 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;--> statement-breakpoint +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 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 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 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 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 + +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_table THEN - NULL; + WHEN duplicate_object THEN NULL; +END $$; +--> statement-breakpoint - WHEN duplicate_object THEN - NULL; +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 From d5073d1c9d4e37db9c52ed3de855ff6fd843064d Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 22:57:11 +0100 Subject: [PATCH 4/7] fix migration file --- apps/api/drizzle/0001_robust_wallflower.sql | 42 ++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/api/drizzle/0001_robust_wallflower.sql b/apps/api/drizzle/0001_robust_wallflower.sql index 4f8bbc5b..26cd1b6c 100644 --- a/apps/api/drizzle/0001_robust_wallflower.sql +++ b/apps/api/drizzle/0001_robust_wallflower.sql @@ -1,21 +1,21 @@ -DO $$ -BEGIN - 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");--> statement-breakpoint - -EXCEPTION - WHEN duplicate_table THEN - NULL; - - WHEN duplicate_object THEN - NULL; -END $$; +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 From 7759643ac36c1fac0cc3142c0fefbfea2b0a7f79 Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 23:09:07 +0100 Subject: [PATCH 5/7] fix: migrations files --- apps/api/drizzle/0002_known_reaper.sql | 22 ++++------ apps/api/drizzle/0003_first_pepper_potts.sql | 34 +++------------ apps/api/drizzle/0004_groovy_weapon_omega.sql | 14 +++---- apps/api/drizzle/0005_legal_tattoo.sql | 9 ++-- apps/api/drizzle/0006_aromatic_shiver_man.sql | 9 +--- .../0007_default_email_verification.sql | 5 +-- apps/api/drizzle/0008_pale_mach_iv.sql | 28 +++++-------- apps/api/drizzle/0009_old_toad_men.sql | 9 +--- apps/api/drizzle/0010_naive_groot.sql | 9 +--- apps/api/drizzle/0011_chemical_archangel.sql | 9 ++-- apps/api/drizzle/0012_dry_night_thrasher.sql | 10 ++--- apps/api/drizzle/0013_smart_bromley.sql | 42 +++++++++---------- apps/api/drizzle/0014_new_trauma.sql | 8 +--- 13 files changed, 65 insertions(+), 143 deletions(-) diff --git a/apps/api/drizzle/0002_known_reaper.sql b/apps/api/drizzle/0002_known_reaper.sql index d679328c..13979065 100644 --- a/apps/api/drizzle/0002_known_reaper.sql +++ b/apps/api/drizzle/0002_known_reaper.sql @@ -1,15 +1,7 @@ -DO $$ -BEGIN - 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");--> statement-breakpoint -EXCEPTION - WHEN undefined_object THEN - NULL; - WHEN duplicate_table THEN - NULL; - - WHEN duplicate_object THEN - NULL; -END $$; +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 f6402fd1..00cdeec1 100644 --- a/apps/api/drizzle/0003_first_pepper_potts.sql +++ b/apps/api/drizzle/0003_first_pepper_potts.sql @@ -1,29 +1,5 @@ -DO $$ -BEGIN - 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';--> statement-breakpoint - ALTER TABLE "users" DROP CONSTRAINT "users_google_email_unique";--> statement-breakpoint - -EXCEPTION - WHEN duplicate_table THEN - NULL; - WHEN duplicate_object THEN - NULL; - WHEN unique_violation THEN - NULL; - WHEN undefined_object THEN - NULL; -END$$; - -DO $$ -BEGIN - ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email"); -EXCEPTION - WHEN duplicate_table THEN - NULL; - WHEN duplicate_object THEN - NULL; - WHEN unique_violation THEN - NULL; -END$$; \ 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 b314da22..db4f163f 100644 --- a/apps/api/drizzle/0004_groovy_weapon_omega.sql +++ b/apps/api/drizzle/0004_groovy_weapon_omega.sql @@ -1,12 +1,8 @@ DO $$ BEGIN - ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique";--> statement-breakpoint - ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id");--> statement-breakpoint + ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique"; + ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id"); EXCEPTION - WHEN duplicate_table THEN - NULL; - WHEN duplicate_object THEN - NULL; - WHEN unique_violation THEN - NULL; -END$$; + WHEN duplicate_object THEN NULL; + WHEN undefined_object 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 eb09f258..8b757892 100644 --- a/apps/api/drizzle/0005_legal_tattoo.sql +++ b/apps/api/drizzle/0005_legal_tattoo.sql @@ -1,5 +1,8 @@ DO $$ BEGIN - ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique";--> statement-breakpoint - ALTER TABLE "users" ADD CONSTRAINT "users_google_email_unique" UNIQUE("google_email");--> statement-breakpoint -END$$; \ No newline at end of file + 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 1ece8a15..ea5b6259 100644 --- a/apps/api/drizzle/0006_aromatic_shiver_man.sql +++ b/apps/api/drizzle/0006_aromatic_shiver_man.sql @@ -1,7 +1,2 @@ -DO $$ -BEGIN - ALTER TABLE "users" ADD COLUMN "email_verified_at" timestamp DEFAULT NULL; -EXCEPTION - WHEN duplicate_column THEN - NULL; -END $$; \ 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 c8c4f219..05a5159d 100644 --- a/apps/api/drizzle/0007_default_email_verification.sql +++ b/apps/api/drizzle/0007_default_email_verification.sql @@ -1,4 +1 @@ -DO $$ -BEGIN - UPDATE users SET email_verified_at = NOW() WHERE email_verified_at IS NULL;--> statement-breakpoint -END $$; \ 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 737f6dd6..e4f9dbb7 100644 --- a/apps/api/drizzle/0008_pale_mach_iv.sql +++ b/apps/api/drizzle/0008_pale_mach_iv.sql @@ -1,18 +1,10 @@ -DO $$ -BEGIN - 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") - );--> statement-breakpoint - -EXCEPTION - WHEN duplicate_table THEN - NULL; - -END $$; +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 09522f12..e5ddace0 100644 --- a/apps/api/drizzle/0009_old_toad_men.sql +++ b/apps/api/drizzle/0009_old_toad_men.sql @@ -1,8 +1 @@ -DO $$ -BEGIN - ALTER TABLE "pending_registrations" ADD COLUMN "code" varchar(8) NOT NULL;--> statement-breakpoint -EXCEPTION - WHEN duplicate_column THEN - NULL; - -END $$; +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 4f27dee9..43353db8 100644 --- a/apps/api/drizzle/0010_naive_groot.sql +++ b/apps/api/drizzle/0010_naive_groot.sql @@ -1,8 +1 @@ -DO $$ -BEGIN - ALTER TABLE "pending_registrations" ADD COLUMN "expires_at" timestamp DEFAULT now() + interval '30 minutes' NOT NULL;--> statement-breakpoint -EXCEPTION - WHEN duplicate_column THEN - NULL; - -END $$; +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 d627972d..bd1e4611 100644 --- a/apps/api/drizzle/0011_chemical_archangel.sql +++ b/apps/api/drizzle/0011_chemical_archangel.sql @@ -1,10 +1,7 @@ DO $$ BEGIN - ALTER TABLE "users" RENAME COLUMN "password" TO "hashed_password";--> statement-breakpoint + ALTER TABLE "users" RENAME COLUMN "password" TO "hashed_password"; EXCEPTION - WHEN undefined_column THEN - NULL; - - WHEN duplicate_column THEN - NULL; + 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 b6a12a37..d6fdb134 100644 --- a/apps/api/drizzle/0012_dry_night_thrasher.sql +++ b/apps/api/drizzle/0012_dry_night_thrasher.sql @@ -1,10 +1,6 @@ DO $$ BEGIN - ALTER TABLE "pending_registrations" RENAME COLUMN "password" TO "hashed_password";--> statement-breakpoint + ALTER TABLE "pending_registrations" RENAME COLUMN "password" TO "hashed_password"; EXCEPTION - WHEN undefined_column THEN - NULL; - - WHEN duplicate_column THEN - NULL; -END $$; + 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 d2ea81d2..e0a78d5f 100644 --- a/apps/api/drizzle/0013_smart_bromley.sql +++ b/apps/api/drizzle/0013_smart_bromley.sql @@ -1,25 +1,23 @@ +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 DO $$ BEGIN - 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") - ); - --> 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");--> 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; EXCEPTION - WHEN duplicate_table THEN - NULL; - WHEN duplicate_object THEN - NULL; - WHEN unique_violation THEN - NULL; -END$$; + 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 a4a662cd..a410ba88 100644 --- a/apps/api/drizzle/0014_new_trauma.sql +++ b/apps/api/drizzle/0014_new_trauma.sql @@ -1,7 +1 @@ -DO $$ -BEGIN - ALTER TABLE "pending_registrations" ADD COLUMN "attempts" integer DEFAULT 0 NOT NULL;--> statement-breakpoint -EXCEPTION - WHEN duplicate_column THEN - NULL; -END$$; \ 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 From 7b597ef610a2e7bdbe4a782984147a78cfda116b Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 23:14:16 +0100 Subject: [PATCH 6/7] fix: sql migrations --- apps/api/drizzle/0004_groovy_weapon_omega.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/api/drizzle/0004_groovy_weapon_omega.sql b/apps/api/drizzle/0004_groovy_weapon_omega.sql index db4f163f..b3f961eb 100644 --- a/apps/api/drizzle/0004_groovy_weapon_omega.sql +++ b/apps/api/drizzle/0004_groovy_weapon_omega.sql @@ -5,4 +5,5 @@ BEGIN EXCEPTION WHEN duplicate_object THEN NULL; WHEN undefined_object THEN NULL; + WHEN unique_violation THEN NULL; END $$; \ No newline at end of file From 97b223e36a382f80dbf808bcb30e0c6ccd1441fa Mon Sep 17 00:00:00 2001 From: Friedrich482 Date: Mon, 22 Dec 2025 23:18:16 +0100 Subject: [PATCH 7/7] fix: sql migrations --- apps/api/drizzle/0004_groovy_weapon_omega.sql | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/api/drizzle/0004_groovy_weapon_omega.sql b/apps/api/drizzle/0004_groovy_weapon_omega.sql index b3f961eb..2287f668 100644 --- a/apps/api/drizzle/0004_groovy_weapon_omega.sql +++ b/apps/api/drizzle/0004_groovy_weapon_omega.sql @@ -1,9 +1,20 @@ DO $$ BEGIN - ALTER TABLE "users" DROP CONSTRAINT IF EXISTS "users_google_email_unique"; + 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 THEN NULL; - WHEN undefined_object THEN NULL; - WHEN unique_violation THEN NULL; + WHEN duplicate_object OR duplicate_table OR unique_violation THEN + NULL; END $$; \ No newline at end of file