Files
2025-12-23 19:52:30 +05:30

430 lines
15 KiB
SQL

-- CreateEnum
CREATE TYPE "OrganizationPlan" AS ENUM ('free', 'pro', 'enterprise');
-- CreateEnum
CREATE TYPE "UserStatus" AS ENUM ('active', 'inactive', 'suspended');
-- CreateEnum
CREATE TYPE "MemberRole" AS ENUM ('owner', 'admin', 'member', 'viewer');
-- CreateEnum
CREATE TYPE "ClusterEnvironment" AS ENUM ('development', 'staging', 'production');
-- CreateEnum
CREATE TYPE "ClusterStatus" AS ENUM ('connected', 'disconnected', 'degraded');
-- CreateEnum
CREATE TYPE "HealthStatus" AS ENUM ('healthy', 'unhealthy', 'unknown');
-- CreateEnum
CREATE TYPE "AlertSeverity" AS ENUM ('info', 'warning', 'critical');
-- CreateEnum
CREATE TYPE "NotificationChannelType" AS ENUM ('slack', 'email', 'teams', 'pagerduty', 'google_chat', 'webhook');
-- CreateEnum
CREATE TYPE "IncidentStatus" AS ENUM ('open', 'acknowledged', 'resolved', 'closed');
-- CreateEnum
CREATE TYPE "InviteStatus" AS ENUM ('pending', 'accepted', 'expired', 'revoked');
-- CreateTable
CREATE TABLE "users" (
"id" UUID NOT NULL,
"email" VARCHAR(255) NOT NULL,
"password_hash" VARCHAR(255) NOT NULL,
"first_name" VARCHAR(100),
"last_name" VARCHAR(100),
"avatar_url" VARCHAR(500),
"status" "UserStatus" NOT NULL DEFAULT 'active',
"email_verified" BOOLEAN NOT NULL DEFAULT false,
"mfa_enabled" BOOLEAN NOT NULL DEFAULT false,
"mfa_secret" VARCHAR(255),
"settings" JSONB NOT NULL DEFAULT '{}',
"last_login_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "organizations" (
"id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"slug" VARCHAR(50) NOT NULL,
"plan" "OrganizationPlan" NOT NULL DEFAULT 'free',
"settings" JSONB NOT NULL DEFAULT '{}',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "organizations_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "organization_members" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"role" "MemberRole" NOT NULL DEFAULT 'member',
"invited_by" UUID,
"joined_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "organization_members_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "teams" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"description" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "teams_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "team_members" (
"id" UUID NOT NULL,
"team_id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"role" "MemberRole" NOT NULL DEFAULT 'member',
"added_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "team_members_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "nats_clusters" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"description" TEXT,
"environment" "ClusterEnvironment" NOT NULL DEFAULT 'development',
"status" "ClusterStatus" NOT NULL DEFAULT 'disconnected',
"version" VARCHAR(50),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "nats_clusters_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "cluster_connections" (
"id" UUID NOT NULL,
"cluster_id" UUID NOT NULL,
"server_url" VARCHAR(500) NOT NULL,
"credentials" JSONB,
"tls_config" JSONB,
"is_primary" BOOLEAN NOT NULL DEFAULT false,
"health_status" "HealthStatus" NOT NULL DEFAULT 'unknown',
"last_health_check" TIMESTAMP(3),
CONSTRAINT "cluster_connections_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "stream_configs" (
"id" UUID NOT NULL,
"cluster_id" UUID NOT NULL,
"stream_name" VARCHAR(256) NOT NULL,
"config_snapshot" JSONB NOT NULL,
"created_by" UUID NOT NULL,
"is_managed" BOOLEAN NOT NULL DEFAULT true,
"tags" JSONB NOT NULL DEFAULT '[]',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "stream_configs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "consumer_configs" (
"id" UUID NOT NULL,
"stream_config_id" UUID NOT NULL,
"consumer_name" VARCHAR(256) NOT NULL,
"config_snapshot" JSONB NOT NULL,
"created_by" UUID NOT NULL,
"is_managed" BOOLEAN NOT NULL DEFAULT true,
"tags" JSONB NOT NULL DEFAULT '[]',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "consumer_configs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "roles" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"description" TEXT,
"is_system" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "roles_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "permissions" (
"id" UUID NOT NULL,
"role_id" UUID NOT NULL,
"resource" VARCHAR(100) NOT NULL,
"action" VARCHAR(100) NOT NULL,
"conditions" JSONB,
CONSTRAINT "permissions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "sessions" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"token_hash" VARCHAR(255) NOT NULL,
"ip_address" INET,
"user_agent" TEXT,
"expires_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "api_keys" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"key_hash" VARCHAR(255) NOT NULL,
"prefix" VARCHAR(10) NOT NULL,
"permissions" JSONB NOT NULL DEFAULT '[]',
"last_used_at" TIMESTAMP(3),
"expires_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "api_keys_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "dashboards" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"description" TEXT,
"layout" JSONB NOT NULL DEFAULT '{"columns": 12, "rowHeight": 80}',
"widgets" JSONB NOT NULL DEFAULT '[]',
"is_shared" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "dashboards_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "saved_queries" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"query" TEXT NOT NULL,
"description" TEXT,
"is_shared" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "saved_queries_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "notification_channels" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"type" "NotificationChannelType" NOT NULL,
"config" JSONB NOT NULL,
"is_enabled" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "notification_channels_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "alert_rules" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"cluster_id" UUID,
"name" VARCHAR(100) NOT NULL,
"condition" JSONB NOT NULL,
"threshold" JSONB NOT NULL,
"severity" "AlertSeverity" NOT NULL DEFAULT 'warning',
"is_enabled" BOOLEAN NOT NULL DEFAULT true,
"cooldown_mins" INTEGER NOT NULL DEFAULT 5,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "alert_rules_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "alert_rule_notification_channels" (
"id" UUID NOT NULL,
"rule_id" UUID NOT NULL,
"channel_id" UUID NOT NULL,
CONSTRAINT "alert_rule_notification_channels_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "alert_incidents" (
"id" UUID NOT NULL,
"rule_id" UUID NOT NULL,
"status" "IncidentStatus" NOT NULL DEFAULT 'open',
"triggered_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"acknowledged_at" TIMESTAMP(3),
"resolved_at" TIMESTAMP(3),
"closed_at" TIMESTAMP(3),
"metadata" JSONB NOT NULL DEFAULT '{}',
"notified_at" TIMESTAMP(3),
CONSTRAINT "alert_incidents_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "invites" (
"id" UUID NOT NULL,
"org_id" UUID NOT NULL,
"email" VARCHAR(255) NOT NULL,
"role" "MemberRole" NOT NULL DEFAULT 'member',
"token" VARCHAR(255) NOT NULL,
"status" "InviteStatus" NOT NULL DEFAULT 'pending',
"invited_by" UUID NOT NULL,
"expires_at" TIMESTAMP(3) NOT NULL,
"accepted_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "invites_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "organizations_slug_key" ON "organizations"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "organization_members_org_id_user_id_key" ON "organization_members"("org_id", "user_id");
-- CreateIndex
CREATE UNIQUE INDEX "team_members_team_id_user_id_key" ON "team_members"("team_id", "user_id");
-- CreateIndex
CREATE UNIQUE INDEX "stream_configs_cluster_id_stream_name_key" ON "stream_configs"("cluster_id", "stream_name");
-- CreateIndex
CREATE UNIQUE INDEX "consumer_configs_stream_config_id_consumer_name_key" ON "consumer_configs"("stream_config_id", "consumer_name");
-- CreateIndex
CREATE UNIQUE INDEX "roles_org_id_name_key" ON "roles"("org_id", "name");
-- CreateIndex
CREATE UNIQUE INDEX "alert_rule_notification_channels_rule_id_channel_id_key" ON "alert_rule_notification_channels"("rule_id", "channel_id");
-- CreateIndex
CREATE INDEX "alert_incidents_rule_id_status_idx" ON "alert_incidents"("rule_id", "status");
-- CreateIndex
CREATE UNIQUE INDEX "invites_token_key" ON "invites"("token");
-- AddForeignKey
ALTER TABLE "organization_members" ADD CONSTRAINT "organization_members_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "organization_members" ADD CONSTRAINT "organization_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "organization_members" ADD CONSTRAINT "organization_members_invited_by_fkey" FOREIGN KEY ("invited_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "teams" ADD CONSTRAINT "teams_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "team_members" ADD CONSTRAINT "team_members_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "team_members" ADD CONSTRAINT "team_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "nats_clusters" ADD CONSTRAINT "nats_clusters_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "cluster_connections" ADD CONSTRAINT "cluster_connections_cluster_id_fkey" FOREIGN KEY ("cluster_id") REFERENCES "nats_clusters"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "stream_configs" ADD CONSTRAINT "stream_configs_cluster_id_fkey" FOREIGN KEY ("cluster_id") REFERENCES "nats_clusters"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "stream_configs" ADD CONSTRAINT "stream_configs_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "consumer_configs" ADD CONSTRAINT "consumer_configs_stream_config_id_fkey" FOREIGN KEY ("stream_config_id") REFERENCES "stream_configs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "consumer_configs" ADD CONSTRAINT "consumer_configs_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "roles" ADD CONSTRAINT "roles_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "permissions" ADD CONSTRAINT "permissions_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "api_keys" ADD CONSTRAINT "api_keys_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "api_keys" ADD CONSTRAINT "api_keys_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "saved_queries" ADD CONSTRAINT "saved_queries_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "saved_queries" ADD CONSTRAINT "saved_queries_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "notification_channels" ADD CONSTRAINT "notification_channels_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "alert_rules" ADD CONSTRAINT "alert_rules_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "alert_rules" ADD CONSTRAINT "alert_rules_cluster_id_fkey" FOREIGN KEY ("cluster_id") REFERENCES "nats_clusters"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "alert_rule_notification_channels" ADD CONSTRAINT "alert_rule_notification_channels_rule_id_fkey" FOREIGN KEY ("rule_id") REFERENCES "alert_rules"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "alert_rule_notification_channels" ADD CONSTRAINT "alert_rule_notification_channels_channel_id_fkey" FOREIGN KEY ("channel_id") REFERENCES "notification_channels"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "alert_incidents" ADD CONSTRAINT "alert_incidents_rule_id_fkey" FOREIGN KEY ("rule_id") REFERENCES "alert_rules"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "invites" ADD CONSTRAINT "invites_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "invites" ADD CONSTRAINT "invites_invited_by_fkey" FOREIGN KEY ("invited_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;