77 lines
3.4 KiB
SQL
77 lines
3.4 KiB
SQL
CREATE TYPE "AnalysisJobKind" AS ENUM ('portfolio_health');
|
|
CREATE TYPE "AnalysisJobStatus" AS ENUM ('queued', 'running', 'succeeded', 'failed', 'cancelled');
|
|
CREATE TYPE "AnalysisJobItemStatus" AS ENUM ('pending', 'running', 'succeeded', 'failed', 'cancelled');
|
|
|
|
CREATE TABLE "AnalysisJob" (
|
|
"id" TEXT NOT NULL,
|
|
"kind" "AnalysisJobKind" NOT NULL DEFAULT 'portfolio_health',
|
|
"status" "AnalysisJobStatus" NOT NULL DEFAULT 'queued',
|
|
"actor" TEXT NOT NULL,
|
|
"requestJson" JSONB NOT NULL,
|
|
"requestHash" TEXT NOT NULL,
|
|
"activeDedupeKey" TEXT,
|
|
"progressCurrent" INTEGER NOT NULL DEFAULT 0,
|
|
"progressTotal" INTEGER NOT NULL DEFAULT 0,
|
|
"summaryText" TEXT,
|
|
"summaryJson" JSONB,
|
|
"errorCode" TEXT,
|
|
"cancelRequestedAt" TIMESTAMP(3),
|
|
"queuedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"startedAt" TIMESTAMP(3),
|
|
"heartbeatAt" TIMESTAMP(3),
|
|
"completedAt" TIMESTAMP(3),
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "AnalysisJob_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "AnalysisJobItem" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"repositoryLinkId" TEXT,
|
|
"projectId" TEXT,
|
|
"projectSlug" TEXT,
|
|
"projectName" TEXT,
|
|
"owner" TEXT NOT NULL,
|
|
"repository" TEXT NOT NULL,
|
|
"defaultBranch" TEXT NOT NULL,
|
|
"accessMode" "GiteaAccessMode" NOT NULL,
|
|
"sequence" INTEGER NOT NULL,
|
|
"status" "AnalysisJobItemStatus" NOT NULL DEFAULT 'pending',
|
|
"summary" TEXT,
|
|
"detailJson" JSONB,
|
|
"findingCount" INTEGER NOT NULL DEFAULT 0,
|
|
"errorCode" TEXT,
|
|
"startedAt" TIMESTAMP(3),
|
|
"completedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "AnalysisJobItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "AnalysisJob_activeDedupeKey_key" ON "AnalysisJob"("activeDedupeKey");
|
|
CREATE INDEX "AnalysisJob_status_queuedAt_idx" ON "AnalysisJob"("status", "queuedAt");
|
|
CREATE INDEX "AnalysisJob_actor_createdAt_idx" ON "AnalysisJob"("actor", "createdAt");
|
|
CREATE INDEX "AnalysisJob_expiresAt_idx" ON "AnalysisJob"("expiresAt");
|
|
CREATE UNIQUE INDEX "AnalysisJobItem_jobId_owner_repository_key" ON "AnalysisJobItem"("jobId", "owner", "repository");
|
|
CREATE INDEX "AnalysisJobItem_jobId_sequence_idx" ON "AnalysisJobItem"("jobId", "sequence");
|
|
CREATE INDEX "AnalysisJobItem_projectId_createdAt_idx" ON "AnalysisJobItem"("projectId", "createdAt");
|
|
CREATE INDEX "AnalysisJobItem_repositoryLinkId_createdAt_idx" ON "AnalysisJobItem"("repositoryLinkId", "createdAt");
|
|
|
|
ALTER TABLE "AnalysisJobItem" ADD CONSTRAINT "AnalysisJobItem_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "AnalysisJob"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "AnalysisJobItem" ADD CONSTRAINT "AnalysisJobItem_repositoryLinkId_fkey" FOREIGN KEY ("repositoryLinkId") REFERENCES "GiteaRepositoryLink"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
CREATE TABLE "AnalysisWorkerHeartbeat" (
|
|
"id" TEXT NOT NULL,
|
|
"instanceId" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"activeJobId" TEXT,
|
|
"detail" TEXT,
|
|
"startedAt" TIMESTAMP(3) NOT NULL,
|
|
"lastSeenAt" TIMESTAMP(3) NOT NULL,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "AnalysisWorkerHeartbeat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
CREATE INDEX "AnalysisWorkerHeartbeat_lastSeenAt_idx" ON "AnalysisWorkerHeartbeat"("lastSeenAt");
|