DevOS v1 + Phase 2: unified resource model, infra ops, website deployment, AI chat ops
- Monorepo: NestJS API (Fastify) + React web (antd/ProComponents) + shared packages - PostgreSQL/Prisma (unified resources, relations graph, audit, events, jobs) - Auth/RBAC/workspace isolation, credential vault (AES-256-GCM) - Servers/SSH, Docker discovery & lifecycle, Job Center - Websites & deployments (git provider credential clone, env, health verification) - Domains/DNS (Cloudflare adapter), certificates (TLS probe), monitoring - Automation (cron/event/webhook HMAC + notifications), AI Gateway, MCP (29 tools) - AI chat window (LLM function-calling + rules fallback, SSE streaming, approvals) - Notes: Vditor WYSIWYG markdown editor, non-blocking autosave - Tests: 35 unit/security tests; UI audit clean (desktop+mobile, deep links)
This commit is contained in:
@@ -0,0 +1,581 @@
|
||||
-- CreateSchema
|
||||
CREATE SCHEMA IF NOT EXISTS "public";
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ResourceType" AS ENUM ('SERVER', 'DOMAIN', 'WEBSITE', 'REPOSITORY', 'DATABASE', 'CONTAINER', 'EMAIL_ACCOUNT', 'PROJECT', 'TASK', 'NOTE', 'DOCUMENT', 'BACKUP', 'DEPLOYMENT', 'MONITOR', 'CREDENTIAL', 'AUTOMATION', 'AI_RUN');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ResourceStatus" AS ENUM ('PENDING', 'ACTIVE', 'ERROR', 'OFFLINE', 'ARCHIVED', 'UNKNOWN');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "WorkspaceRole" AS ENUM ('OWNER', 'ADMIN', 'MEMBER', 'VIEWER');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "RiskLevel" AS ENUM ('LOW', 'MEDIUM', 'HIGH', 'CRITICAL');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ActorType" AS ENUM ('USER', 'SYSTEM', 'AGENT', 'MCP');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "JobStatus" AS ENUM ('PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED', 'CANCELLED', 'DEAD');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "DeploymentStatus" AS ENUM ('QUEUED', 'RUNNING', 'SUCCEEDED', 'FAILED', 'CANCELLED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "CredentialType" AS ENUM ('SSH_PASSWORD', 'SSH_KEY', 'API_TOKEN', 'DNS_PROVIDER', 'GIT_TOKEN');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ServerAuthType" AS ENUM ('PASSWORD', 'SSH_KEY');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TriggerType" AS ENUM ('MANUAL', 'CRON', 'EVENT', 'WEBHOOK');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AiRunStatus" AS ENUM ('PLANNING', 'AWAITING_APPROVAL', 'RUNNING', 'SUCCEEDED', 'FAILED', 'REJECTED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "users" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"passwordHash" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "workspaces" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"slug" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "workspaces_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "workspace_members" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"role" "WorkspaceRole" NOT NULL DEFAULT 'MEMBER',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "workspace_members_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "resources" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"type" "ResourceType" NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"provider" TEXT,
|
||||
"status" "ResourceStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"metadata" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "resources_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "resource_relations" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"sourceId" TEXT NOT NULL,
|
||||
"targetId" TEXT NOT NULL,
|
||||
"relationType" TEXT NOT NULL,
|
||||
"metadata" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "resource_relations_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "credentials" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT,
|
||||
"name" TEXT NOT NULL,
|
||||
"type" "CredentialType" NOT NULL,
|
||||
"provider" TEXT,
|
||||
"encryptedData" TEXT NOT NULL,
|
||||
"metadata" JSONB NOT NULL DEFAULT '{}',
|
||||
"lastUsedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "credentials_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audit_logs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"actorType" "ActorType" NOT NULL,
|
||||
"actorId" TEXT,
|
||||
"action" TEXT NOT NULL,
|
||||
"resourceType" TEXT,
|
||||
"resourceId" TEXT,
|
||||
"riskLevel" "RiskLevel" NOT NULL DEFAULT 'LOW',
|
||||
"status" TEXT NOT NULL DEFAULT 'SUCCESS',
|
||||
"requestId" TEXT,
|
||||
"ip" TEXT,
|
||||
"metadata" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "events" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"eventType" TEXT NOT NULL,
|
||||
"resourceId" TEXT,
|
||||
"payload" JSONB NOT NULL DEFAULT '{}',
|
||||
"correlationId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "events_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "jobs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"status" "JobStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"payload" JSONB NOT NULL DEFAULT '{}',
|
||||
"result" JSONB,
|
||||
"error" TEXT,
|
||||
"attempts" INTEGER NOT NULL DEFAULT 0,
|
||||
"maxAttempts" INTEGER NOT NULL DEFAULT 3,
|
||||
"runAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"startedAt" TIMESTAMP(3),
|
||||
"finishedAt" TIMESTAMP(3),
|
||||
"correlationId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "jobs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "servers" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"host" TEXT NOT NULL,
|
||||
"port" INTEGER NOT NULL DEFAULT 22,
|
||||
"username" TEXT NOT NULL,
|
||||
"authType" "ServerAuthType" NOT NULL DEFAULT 'SSH_KEY',
|
||||
"provider" TEXT NOT NULL DEFAULT 'ssh',
|
||||
"credentialId" TEXT,
|
||||
"osInfo" TEXT,
|
||||
"labels" JSONB NOT NULL DEFAULT '{}',
|
||||
"lastSeenAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "servers_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "containers" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"serverId" TEXT NOT NULL,
|
||||
"containerId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"image" TEXT NOT NULL,
|
||||
"state" TEXT NOT NULL,
|
||||
"ports" JSONB NOT NULL DEFAULT '{}',
|
||||
"labels" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "containers_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "websites" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"primaryDomain" TEXT,
|
||||
"serverId" TEXT,
|
||||
"repositoryUrl" TEXT,
|
||||
"deployType" TEXT NOT NULL DEFAULT 'DOCKER',
|
||||
"port" INTEGER NOT NULL DEFAULT 80,
|
||||
"healthPath" TEXT NOT NULL DEFAULT '/',
|
||||
"env" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "websites_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "domains" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"provider" TEXT NOT NULL DEFAULT 'MANUAL',
|
||||
"credentialId" TEXT,
|
||||
"expiresAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "domains_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "domain_records" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"domainId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"value" TEXT NOT NULL,
|
||||
"ttl" INTEGER NOT NULL DEFAULT 300,
|
||||
"proxied" BOOLEAN NOT NULL DEFAULT false,
|
||||
"providerRecordId" TEXT,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "domain_records_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "deployments" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"websiteId" TEXT NOT NULL,
|
||||
"status" "DeploymentStatus" NOT NULL DEFAULT 'QUEUED',
|
||||
"trigger" TEXT NOT NULL DEFAULT 'MANUAL',
|
||||
"progress" INTEGER NOT NULL DEFAULT 0,
|
||||
"error" TEXT,
|
||||
"commit" TEXT,
|
||||
"config" JSONB NOT NULL DEFAULT '{}',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"finishedAt" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "deployments_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "deployment_logs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"deploymentId" TEXT NOT NULL,
|
||||
"seq" INTEGER NOT NULL,
|
||||
"stream" TEXT NOT NULL DEFAULT 'stdout',
|
||||
"line" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "deployment_logs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "monitors" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"websiteId" TEXT,
|
||||
"serverId" TEXT,
|
||||
"name" TEXT NOT NULL,
|
||||
"kind" TEXT NOT NULL DEFAULT 'HTTP',
|
||||
"target" TEXT NOT NULL,
|
||||
"intervalSec" INTEGER NOT NULL DEFAULT 60,
|
||||
"timeoutMs" INTEGER NOT NULL DEFAULT 10000,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"lastStatus" TEXT NOT NULL DEFAULT 'UNKNOWN',
|
||||
"consecutiveFailures" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastCheckedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "monitors_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "monitor_results" (
|
||||
"id" TEXT NOT NULL,
|
||||
"monitorId" TEXT NOT NULL,
|
||||
"ok" BOOLEAN NOT NULL,
|
||||
"status" TEXT,
|
||||
"latencyMs" INTEGER,
|
||||
"error" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "monitor_results_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "automations" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"triggerType" "TriggerType" NOT NULL,
|
||||
"triggerConfig" JSONB NOT NULL DEFAULT '{}',
|
||||
"conditions" JSONB NOT NULL DEFAULT '[]',
|
||||
"actions" JSONB NOT NULL DEFAULT '[]',
|
||||
"lastTriggeredAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "automations_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "automation_runs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"automationId" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'RUNNING',
|
||||
"trigger" JSONB NOT NULL DEFAULT '{}',
|
||||
"stepIndex" INTEGER NOT NULL DEFAULT 0,
|
||||
"logs" JSONB NOT NULL DEFAULT '[]',
|
||||
"error" TEXT,
|
||||
"correlationId" TEXT,
|
||||
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"finishedAt" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "automation_runs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ai_runs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"workspaceId" TEXT NOT NULL,
|
||||
"resourceId" TEXT NOT NULL,
|
||||
"objective" TEXT NOT NULL,
|
||||
"status" "AiRunStatus" NOT NULL DEFAULT 'PLANNING',
|
||||
"riskLevel" "RiskLevel" NOT NULL DEFAULT 'LOW',
|
||||
"plan" JSONB NOT NULL DEFAULT '[]',
|
||||
"toolCalls" JSONB NOT NULL DEFAULT '[]',
|
||||
"verification" JSONB,
|
||||
"result" JSONB,
|
||||
"error" TEXT,
|
||||
"approvedBy" TEXT,
|
||||
"approvedAt" TIMESTAMP(3),
|
||||
"correlationId" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ai_runs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "workspaces_slug_key" ON "workspaces"("slug");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "workspace_members_userId_idx" ON "workspace_members"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "workspace_members_workspaceId_userId_key" ON "workspace_members"("workspaceId", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resources_workspaceId_idx" ON "resources"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resources_type_status_idx" ON "resources"("type", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resources_workspaceId_type_idx" ON "resources"("workspaceId", "type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resource_relations_sourceId_idx" ON "resource_relations"("sourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resource_relations_targetId_idx" ON "resource_relations"("targetId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "resource_relations_workspaceId_idx" ON "resource_relations"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "resource_relations_sourceId_targetId_relationType_key" ON "resource_relations"("sourceId", "targetId", "relationType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "credentials_resourceId_key" ON "credentials"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "credentials_workspaceId_idx" ON "credentials"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_logs_workspaceId_createdAt_idx" ON "audit_logs"("workspaceId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_logs_resourceType_resourceId_idx" ON "audit_logs"("resourceType", "resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "events_eventType_createdAt_idx" ON "events"("eventType", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "events_workspaceId_createdAt_idx" ON "events"("workspaceId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "jobs_status_runAt_idx" ON "jobs"("status", "runAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "jobs_workspaceId_idx" ON "jobs"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "servers_resourceId_key" ON "servers"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "servers_workspaceId_idx" ON "servers"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "containers_resourceId_key" ON "containers"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "containers_serverId_idx" ON "containers"("serverId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "containers_workspaceId_idx" ON "containers"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "websites_resourceId_key" ON "websites"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "websites_workspaceId_idx" ON "websites"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "domains_resourceId_key" ON "domains"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "domains_workspaceId_idx" ON "domains"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "domain_records_workspaceId_idx" ON "domain_records"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "domain_records_domainId_type_name_value_key" ON "domain_records"("domainId", "type", "name", "value");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "deployments_resourceId_key" ON "deployments"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "deployments_websiteId_createdAt_idx" ON "deployments"("websiteId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "deployments_workspaceId_createdAt_idx" ON "deployments"("workspaceId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "deployment_logs_deploymentId_seq_idx" ON "deployment_logs"("deploymentId", "seq");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "monitors_resourceId_key" ON "monitors"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "monitors_enabled_lastCheckedAt_idx" ON "monitors"("enabled", "lastCheckedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "monitors_workspaceId_idx" ON "monitors"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "monitor_results_monitorId_createdAt_idx" ON "monitor_results"("monitorId", "createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "automations_resourceId_key" ON "automations"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "automations_workspaceId_idx" ON "automations"("workspaceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "automations_triggerType_enabled_idx" ON "automations"("triggerType", "enabled");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "automation_runs_automationId_startedAt_idx" ON "automation_runs"("automationId", "startedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ai_runs_resourceId_key" ON "ai_runs"("resourceId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ai_runs_workspaceId_createdAt_idx" ON "ai_runs"("workspaceId", "createdAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "workspace_members" ADD CONSTRAINT "workspace_members_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "workspace_members" ADD CONSTRAINT "workspace_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "resources" ADD CONSTRAINT "resources_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "resource_relations" ADD CONSTRAINT "resource_relations_sourceId_fkey" FOREIGN KEY ("sourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "resource_relations" ADD CONSTRAINT "resource_relations_targetId_fkey" FOREIGN KEY ("targetId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "credentials" ADD CONSTRAINT "credentials_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "servers" ADD CONSTRAINT "servers_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "containers" ADD CONSTRAINT "containers_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "containers" ADD CONSTRAINT "containers_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "servers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "websites" ADD CONSTRAINT "websites_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "websites" ADD CONSTRAINT "websites_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "servers"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "domains" ADD CONSTRAINT "domains_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "domain_records" ADD CONSTRAINT "domain_records_domainId_fkey" FOREIGN KEY ("domainId") REFERENCES "domains"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "deployments" ADD CONSTRAINT "deployments_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "deployments" ADD CONSTRAINT "deployments_websiteId_fkey" FOREIGN KEY ("websiteId") REFERENCES "websites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "deployment_logs" ADD CONSTRAINT "deployment_logs_deploymentId_fkey" FOREIGN KEY ("deploymentId") REFERENCES "deployments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "monitors" ADD CONSTRAINT "monitors_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "monitors" ADD CONSTRAINT "monitors_websiteId_fkey" FOREIGN KEY ("websiteId") REFERENCES "websites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "monitors" ADD CONSTRAINT "monitors_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "servers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "monitor_results" ADD CONSTRAINT "monitor_results_monitorId_fkey" FOREIGN KEY ("monitorId") REFERENCES "monitors"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "automations" ADD CONSTRAINT "automations_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "automation_runs" ADD CONSTRAINT "automation_runs_automationId_fkey" FOREIGN KEY ("automationId") REFERENCES "automations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ai_runs" ADD CONSTRAINT "ai_runs_resourceId_fkey" FOREIGN KEY ("resourceId") REFERENCES "resources"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
Reference in New Issue
Block a user