-- CreateEnum CREATE TYPE "dialplan_version_status" AS ENUM ('DRAFT', 'ACTIVE', 'SUPERSEDED'); -- CreateTable CREATE TABLE "dialplan_extensions" ( "id" UUID NOT NULL, "tenant_id" UUID NOT NULL, "context" TEXT NOT NULL DEFAULT 'default', "name" TEXT NOT NULL, "condition_field" TEXT NOT NULL, "condition_expr" TEXT NOT NULL, "actions" JSONB NOT NULL, "anti_actions" JSONB, "continue_on_false" BOOLEAN NOT NULL DEFAULT false, "order" INTEGER NOT NULL DEFAULT 0, "enabled" BOOLEAN NOT NULL DEFAULT true, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "deleted_at" TIMESTAMP(3), CONSTRAINT "dialplan_extensions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "dialplan_versions" ( "id" UUID NOT NULL, "tenant_id" UUID NOT NULL, "context" TEXT NOT NULL, "version" INTEGER NOT NULL, "generated_xml" TEXT NOT NULL, "status" "dialplan_version_status" NOT NULL DEFAULT 'DRAFT', "created_by_user_id" UUID, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "activated_at" TIMESTAMP(3), CONSTRAINT "dialplan_versions_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "dialplan_extensions_tenant_id_context_idx" ON "dialplan_extensions"("tenant_id", "context"); -- CreateIndex CREATE INDEX "dialplan_versions_tenant_id_context_status_idx" ON "dialplan_versions"("tenant_id", "context", "status"); -- CreateIndex CREATE UNIQUE INDEX "dialplan_versions_tenant_id_context_version_key" ON "dialplan_versions"("tenant_id", "context", "version"); -- AddForeignKey ALTER TABLE "dialplan_extensions" ADD CONSTRAINT "dialplan_extensions_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "tenants"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "dialplan_versions" ADD CONSTRAINT "dialplan_versions_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "tenants"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- Tabelas de negocio tenant-scoped: RLS obrigatorio (ver docs/TENANT_ISOLATION.md). ALTER TABLE "dialplan_extensions" ENABLE ROW LEVEL SECURITY; ALTER TABLE "dialplan_extensions" FORCE ROW LEVEL SECURITY; CREATE POLICY "tenant_isolation" ON "dialplan_extensions" USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid); ALTER TABLE "dialplan_versions" ENABLE ROW LEVEL SECURITY; ALTER TABLE "dialplan_versions" FORCE ROW LEVEL SECURITY; CREATE POLICY "tenant_isolation" ON "dialplan_versions" USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid);