From ded3d6c3635bfdca0e96365785f98950d903a0a6 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Fri, 1 Aug 2025 14:51:05 +0800 Subject: [PATCH] BLOG-95 refactor: seperate sql migration files --- backend/migrations/20250725231740_v0.3.0.sql | 30 ------------------- ...07_create_update_updated_time_function.sql | 6 ++++ .../20250801061939_create_post_table.sql | 16 ++++++++++ .../20250801062007_create_label_table.sql | 13 ++++++++ ...20250801062251_create_post_label_table.sql | 7 +++++ .../20250801062344_create_image_table.sql | 12 ++++++++ .../20250801062412_create_user_table.sql | 20 +++++++++++++ 7 files changed, 74 insertions(+), 30 deletions(-) delete mode 100644 backend/migrations/20250725231740_v0.3.0.sql create mode 100644 backend/migrations/20250801061907_create_update_updated_time_function.sql create mode 100644 backend/migrations/20250801061939_create_post_table.sql create mode 100644 backend/migrations/20250801062007_create_label_table.sql create mode 100644 backend/migrations/20250801062251_create_post_label_table.sql create mode 100644 backend/migrations/20250801062344_create_image_table.sql create mode 100644 backend/migrations/20250801062412_create_user_table.sql diff --git a/backend/migrations/20250725231740_v0.3.0.sql b/backend/migrations/20250725231740_v0.3.0.sql deleted file mode 100644 index 4b7a6a0..0000000 --- a/backend/migrations/20250725231740_v0.3.0.sql +++ /dev/null @@ -1,30 +0,0 @@ -CREATE TABLE "image" ( - "id" SERIAL PRIMARY KEY NOT NULL, - "mime_type" VARCHAR(100) NOT NULL, - "deleted_time" TIMESTAMP, - "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -); - -CREATE TABLE "user" ( - "id" SERIAL PRIMARY KEY NOT NULL, - "issuer" VARCHAR(100) NOT NULL, - "source_id" VARCHAR(100) NOT NULL, - "displayed_name" VARCHAR(100) NOT NULL, - "email" VARCHAR(100) NOT NULL, - "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -); - -CREATE UNIQUE INDEX "user_source_id_issuer_key" ON "user" ("source_id", "issuer"); -CREATE INDEX "user_email_key" ON "user" HASH ("email"); - -CREATE TRIGGER "update_image_updated_time" -BEFORE UPDATE ON "image" -FOR EACH ROW -EXECUTE FUNCTION update_updated_time_column(); - -CREATE TRIGGER "update_user_updated_time" -BEFORE UPDATE ON "user" -FOR EACH ROW -EXECUTE FUNCTION update_updated_time_column(); diff --git a/backend/migrations/20250801061907_create_update_updated_time_function.sql b/backend/migrations/20250801061907_create_update_updated_time_function.sql new file mode 100644 index 0000000..b365f77 --- /dev/null +++ b/backend/migrations/20250801061907_create_update_updated_time_function.sql @@ -0,0 +1,6 @@ +CREATE OR REPLACE FUNCTION update_updated_time_column() RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_time = CURRENT_TIMESTAMP; + return NEW; +END; +$$ LANGUAGE 'plpgsql'; \ No newline at end of file diff --git a/backend/migrations/20250801061939_create_post_table.sql b/backend/migrations/20250801061939_create_post_table.sql new file mode 100644 index 0000000..aad43cf --- /dev/null +++ b/backend/migrations/20250801061939_create_post_table.sql @@ -0,0 +1,16 @@ +CREATE TABLE IF NOT EXISTS "post" ( + "id" SERIAL PRIMARY KEY NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT NOT NULL, + "preview_image_url" TEXT NOT NULL, + "content" TEXT NOT NULL, + "published_time" TIMESTAMP, + "deleted_time" TIMESTAMP, + "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE OR REPLACE TRIGGER "update_post_updated_time" +BEFORE UPDATE ON "post" +FOR EACH ROW +EXECUTE FUNCTION update_updated_time_column(); diff --git a/backend/migrations/20250801062007_create_label_table.sql b/backend/migrations/20250801062007_create_label_table.sql new file mode 100644 index 0000000..947f129 --- /dev/null +++ b/backend/migrations/20250801062007_create_label_table.sql @@ -0,0 +1,13 @@ +CREATE TABLE IF NOT EXISTS "label" ( + "id" SERIAL PRIMARY KEY NOT NULL, + "name" TEXT NOT NULL, + "color" BIGINT NOT NULL CHECK ("color" >= 0 AND "color" <= 4294967295), + "deleted_time" TIMESTAMP, + "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE OR REPLACE TRIGGER "update_label_updated_time" +BEFORE UPDATE ON "label" +FOR EACH ROW +EXECUTE FUNCTION update_updated_time_column(); diff --git a/backend/migrations/20250801062251_create_post_label_table.sql b/backend/migrations/20250801062251_create_post_label_table.sql new file mode 100644 index 0000000..e218277 --- /dev/null +++ b/backend/migrations/20250801062251_create_post_label_table.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS "post_label" ( + "post_id" INTEGER NOT NULL, + "label_id" INTEGER NOT NULL, + PRIMARY KEY ("post_id", "label_id"), + FOREIGN KEY ("post_id") REFERENCES "post" ("id") ON DELETE CASCADE, + FOREIGN KEY ("label_id") REFERENCES "label" ("id") ON DELETE CASCADE +); diff --git a/backend/migrations/20250801062344_create_image_table.sql b/backend/migrations/20250801062344_create_image_table.sql new file mode 100644 index 0000000..90e7b36 --- /dev/null +++ b/backend/migrations/20250801062344_create_image_table.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS "image" ( + "id" SERIAL PRIMARY KEY NOT NULL, + "mime_type" VARCHAR(100) NOT NULL, + "deleted_time" TIMESTAMP, + "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE OR REPLACE TRIGGER "update_image_updated_time" +BEFORE UPDATE ON "image" +FOR EACH ROW +EXECUTE FUNCTION update_updated_time_column(); diff --git a/backend/migrations/20250801062412_create_user_table.sql b/backend/migrations/20250801062412_create_user_table.sql new file mode 100644 index 0000000..6cc6f44 --- /dev/null +++ b/backend/migrations/20250801062412_create_user_table.sql @@ -0,0 +1,20 @@ +CREATE TABLE IF NOT EXISTS "user" ( + "id" SERIAL PRIMARY KEY NOT NULL, + "issuer" VARCHAR(100) NOT NULL, + "source_id" VARCHAR(100) NOT NULL, + "displayed_name" VARCHAR(100) NOT NULL, + "email" VARCHAR(100) NOT NULL, + "created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE UNIQUE INDEX IF NOT EXISTS "idx_user_source_id_issuer" +ON "user" ("source_id", "issuer"); + +CREATE INDEX IF NOT EXISTS "idx_user_email" +ON "user" USING HASH ("email"); + +CREATE OR REPLACE TRIGGER "update_user_updated_time" +BEFORE UPDATE ON "user" +FOR EACH ROW +EXECUTE FUNCTION update_updated_time_column();