feat: migrate legacy long-lived database records
This commit is contained in:
+125
@@ -0,0 +1,125 @@
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "OAuthType" AS ENUM ('NONE', 'KAKAO');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "GatewayProfileStatus" AS ENUM (
|
||||
'RESERVED', 'PREOPEN', 'RUNNING', 'PAUSED', 'COMPLETED', 'STOPPED', 'DISABLED'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "GatewayBuildStatus" AS ENUM ('IDLE', 'QUEUED', 'RUNNING', 'FAILED', 'SUCCEEDED');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "GatewayOperationType" AS ENUM ('RESET', 'START', 'STOP');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "GatewayOperationStatus" AS ENUM ('QUEUED', 'RUNNING', 'SUCCEEDED', 'FAILED', 'CANCELLED');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
CREATE TYPE "GatewaySourceMode" AS ENUM ('BRANCH', 'COMMIT');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END
|
||||
$$;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "app_user" (
|
||||
"id" TEXT PRIMARY KEY,
|
||||
"login_id" TEXT NOT NULL,
|
||||
"display_name" TEXT NOT NULL,
|
||||
"password_hash" TEXT NOT NULL,
|
||||
"password_salt" TEXT NOT NULL,
|
||||
"roles" JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||
"sanctions" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
"oauth_type" "OAuthType" NOT NULL DEFAULT 'NONE',
|
||||
"oauth_id" TEXT,
|
||||
"email" TEXT,
|
||||
"oauth_info" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"last_login_at" TIMESTAMP(3)
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "app_user_login_id_key" ON "app_user" ("login_id");
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "app_user_oauth_id_key" ON "app_user" ("oauth_id");
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "app_user_email_key" ON "app_user" ("email");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "gateway_profile" (
|
||||
"profile_name" TEXT PRIMARY KEY,
|
||||
"profile" TEXT NOT NULL,
|
||||
"scenario" TEXT NOT NULL,
|
||||
"api_port" INTEGER NOT NULL,
|
||||
"status" "GatewayProfileStatus" NOT NULL,
|
||||
"build_status" "GatewayBuildStatus" NOT NULL DEFAULT 'IDLE',
|
||||
"build_commit_sha" TEXT,
|
||||
"build_workspace" TEXT,
|
||||
"build_last_used_at" TIMESTAMP(3),
|
||||
"preopen_at" TIMESTAMP(3),
|
||||
"open_at" TIMESTAMP(3),
|
||||
"scheduled_start_at" TIMESTAMP(3),
|
||||
"build_requested_at" TIMESTAMP(3),
|
||||
"build_started_at" TIMESTAMP(3),
|
||||
"build_completed_at" TIMESTAMP(3),
|
||||
"build_error" TEXT,
|
||||
"last_error" TEXT,
|
||||
"meta" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "gateway_profile_profile_scenario_key"
|
||||
ON "gateway_profile" ("profile", "scenario");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "gateway_operation" (
|
||||
"id" TEXT PRIMARY KEY,
|
||||
"profile_name" TEXT NOT NULL REFERENCES "gateway_profile" ("profile_name") ON DELETE CASCADE,
|
||||
"type" "GatewayOperationType" NOT NULL,
|
||||
"status" "GatewayOperationStatus" NOT NULL DEFAULT 'QUEUED',
|
||||
"source_mode" "GatewaySourceMode",
|
||||
"source_ref" TEXT,
|
||||
"resolved_commit_sha" TEXT,
|
||||
"payload" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
"reason" TEXT,
|
||||
"requested_by" TEXT NOT NULL,
|
||||
"scheduled_at" TIMESTAMP(3),
|
||||
"started_at" TIMESTAMP(3),
|
||||
"completed_at" TIMESTAMP(3),
|
||||
"error" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "gateway_operation_status_scheduled_at_created_at_idx"
|
||||
ON "gateway_operation" ("status", "scheduled_at", "created_at");
|
||||
CREATE INDEX IF NOT EXISTS "gateway_operation_profile_name_created_at_idx"
|
||||
ON "gateway_operation" ("profile_name", "created_at");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "system" (
|
||||
"no" INTEGER PRIMARY KEY DEFAULT 1,
|
||||
"notice" TEXT NOT NULL DEFAULT ''
|
||||
);
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
ALTER TABLE "app_user"
|
||||
ADD COLUMN IF NOT EXISTS "legacy_data" JSONB NOT NULL DEFAULT '{}'::jsonb;
|
||||
|
||||
ALTER TABLE "system"
|
||||
ADD COLUMN IF NOT EXISTS "registration_enabled" BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
ADD COLUMN IF NOT EXISTS "login_enabled" BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
ADD COLUMN IF NOT EXISTS "created_at" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "updated_at" TIMESTAMP(3);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "legacy_member_log" (
|
||||
"id" BIGINT PRIMARY KEY,
|
||||
"member_no" INTEGER NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"date" TIMESTAMP(3) NOT NULL,
|
||||
"action_type" TEXT NOT NULL,
|
||||
"action" JSONB
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "legacy_member_log_user_date"
|
||||
ON "legacy_member_log" ("user_id", "date");
|
||||
CREATE INDEX IF NOT EXISTS "legacy_member_log_member_date"
|
||||
ON "legacy_member_log" ("member_no", "date");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "legacy_banned_member" (
|
||||
"no" INTEGER PRIMARY KEY,
|
||||
"hashed_email" TEXT NOT NULL UNIQUE,
|
||||
"info" TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "legacy_root_key_value" (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"source_table" TEXT NOT NULL,
|
||||
"namespace" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"value" JSONB NOT NULL,
|
||||
"migrated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "legacy_root_key_value_source_namespace_key"
|
||||
UNIQUE ("source_table", "namespace", "key")
|
||||
);
|
||||
Reference in New Issue
Block a user