-- CreateTable CREATE TABLE "extensions" ( "id" UUID NOT NULL, "tenant_id" UUID NOT NULL, "number" TEXT NOT NULL, "name" TEXT NOT NULL, "domain" TEXT NOT NULL, "sip_password_enc" TEXT NOT NULL, "caller_id_name" TEXT, "caller_id_number" TEXT, "context" TEXT NOT NULL DEFAULT 'default', "sofia_profile" TEXT NOT NULL DEFAULT 'internal', "codecs" TEXT NOT NULL DEFAULT 'PCMU,PCMA,OPUS', "max_registrations" INTEGER NOT NULL DEFAULT 1, "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 "extensions_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "extensions_tenant_id_idx" ON "extensions"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "extensions_tenant_id_number_key" ON "extensions"("tenant_id", "number"); -- AddForeignKey ALTER TABLE "extensions" ADD CONSTRAINT "extensions_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 "extensions" ENABLE ROW LEVEL SECURITY; ALTER TABLE "extensions" FORCE ROW LEVEL SECURITY; CREATE POLICY "tenant_isolation" ON "extensions" USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid);