-- CreateEnum CREATE TYPE "trunk_status" AS ENUM ('UP', 'DOWN', 'REGISTERED', 'TRYING', 'FAILED', 'UNREGISTERED', 'UNKNOWN'); -- CreateEnum CREATE TYPE "dtmf_mode" AS ENUM ('RFC2833', 'INFO', 'INBAND'); -- CreateEnum CREATE TYPE "sip_transport" AS ENUM ('UDP', 'TCP', 'TLS'); -- CreateTable CREATE TABLE "trunks" ( "id" UUID NOT NULL, "tenant_id" UUID NOT NULL, "name" TEXT NOT NULL, "description" TEXT, "sofia_profile" TEXT NOT NULL DEFAULT 'external', "host" TEXT NOT NULL, "proxy" TEXT, "realm" TEXT, "register" BOOLEAN NOT NULL DEFAULT true, "username" TEXT, "password_enc" TEXT, "from_user" TEXT, "from_domain" TEXT, "register_proxy" TEXT, "outbound_proxy" TEXT, "expire_seconds" INTEGER NOT NULL DEFAULT 3600, "retry_seconds" INTEGER NOT NULL DEFAULT 30, "caller_id_name" TEXT, "caller_id_number" TEXT, "codecs" TEXT NOT NULL DEFAULT 'PCMU,PCMA,OPUS', "dtmf_mode" "dtmf_mode" NOT NULL DEFAULT 'RFC2833', "ping" BOOLEAN NOT NULL DEFAULT true, "ping_frequency" INTEGER NOT NULL DEFAULT 30, "transport" "sip_transport" NOT NULL DEFAULT 'UDP', "inbound_context" TEXT NOT NULL DEFAULT 'default', "max_cps" INTEGER, "max_channels" INTEGER, "enabled" BOOLEAN NOT NULL DEFAULT true, "status" "trunk_status" NOT NULL DEFAULT 'UNKNOWN', "status_updated_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "deleted_at" TIMESTAMP(3), CONSTRAINT "trunks_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "trunks_tenant_id_idx" ON "trunks"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "trunks_tenant_id_name_key" ON "trunks"("tenant_id", "name"); -- AddForeignKey ALTER TABLE "trunks" ADD CONSTRAINT "trunks_tenant_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "tenants"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- Tabela de negocio tenant-scoped: RLS obrigatorio (ver docs/TENANT_ISOLATION.md). ALTER TABLE "trunks" ENABLE ROW LEVEL SECURITY; ALTER TABLE "trunks" FORCE ROW LEVEL SECURITY; CREATE POLICY "tenant_isolation" ON "trunks" USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid);