137 lines
4.3 KiB
SQL
137 lines
4.3 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "AppStatus" AS ENUM ('ACTIVE', 'READY', 'DISABLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ComponentType" AS ENUM ('ELECTRON', 'CONTAINER', 'STATIC_WEB', 'DATABASE', 'MIGRATION');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "JobStatus" AS ENUM ('PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED', 'CANCELED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "apps" (
|
|
"id" UUID NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"namespace" TEXT,
|
|
"status" "AppStatus" NOT NULL DEFAULT 'READY',
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "apps_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "app_components" (
|
|
"id" UUID NOT NULL,
|
|
"app_id" UUID NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"type" "ComponentType" NOT NULL,
|
|
"repository" TEXT,
|
|
"branch" TEXT,
|
|
"build_target" TEXT,
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "app_components_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "build_jobs" (
|
|
"id" UUID NOT NULL,
|
|
"component_id" UUID NOT NULL,
|
|
"branch" TEXT NOT NULL,
|
|
"commit_sha" TEXT,
|
|
"artifact" TEXT,
|
|
"image" TEXT,
|
|
"status" "JobStatus" NOT NULL DEFAULT 'PENDING',
|
|
"logs" TEXT,
|
|
"started_at" TIMESTAMPTZ(3),
|
|
"finished_at" TIMESTAMPTZ(3),
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "build_jobs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "app_releases" (
|
|
"id" UUID NOT NULL,
|
|
"app_id" UUID NOT NULL,
|
|
"version" TEXT NOT NULL,
|
|
"branch" TEXT NOT NULL,
|
|
"commit_sha" TEXT,
|
|
"artifact" TEXT,
|
|
"image_tags" JSONB,
|
|
"status" "JobStatus" NOT NULL DEFAULT 'PENDING',
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "app_releases_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "deployment_jobs" (
|
|
"id" UUID NOT NULL,
|
|
"app_id" UUID NOT NULL,
|
|
"release_id" UUID,
|
|
"environment" TEXT NOT NULL,
|
|
"namespace" TEXT NOT NULL,
|
|
"status" "JobStatus" NOT NULL DEFAULT 'PENDING',
|
|
"requested_by" TEXT,
|
|
"logs" TEXT,
|
|
"started_at" TIMESTAMPTZ(3),
|
|
"finished_at" TIMESTAMPTZ(3),
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "deployment_jobs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notices" (
|
|
"id" UUID NOT NULL,
|
|
"scope" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"audience" TEXT NOT NULL,
|
|
"is_active" BOOLEAN NOT NULL DEFAULT true,
|
|
"starts_at" TIMESTAMPTZ(3),
|
|
"ends_at" TIMESTAMPTZ(3),
|
|
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
|
|
|
CONSTRAINT "notices_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "apps_key_key" ON "apps"("key");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "app_components_app_id_name_key" ON "app_components"("app_id", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "build_jobs_component_id_created_at_idx" ON "build_jobs"("component_id", "created_at");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "app_releases_app_id_version_key" ON "app_releases"("app_id", "version");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "deployment_jobs_app_id_created_at_idx" ON "deployment_jobs"("app_id", "created_at");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notices_scope_is_active_idx" ON "notices"("scope", "is_active");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "app_components" ADD CONSTRAINT "app_components_app_id_fkey" FOREIGN KEY ("app_id") REFERENCES "apps"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "build_jobs" ADD CONSTRAINT "build_jobs_component_id_fkey" FOREIGN KEY ("component_id") REFERENCES "app_components"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "app_releases" ADD CONSTRAINT "app_releases_app_id_fkey" FOREIGN KEY ("app_id") REFERENCES "apps"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "deployment_jobs" ADD CONSTRAINT "deployment_jobs_app_id_fkey" FOREIGN KEY ("app_id") REFERENCES "apps"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "deployment_jobs" ADD CONSTRAINT "deployment_jobs_release_id_fkey" FOREIGN KEY ("release_id") REFERENCES "app_releases"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|