-- CreateEnum CREATE TYPE "queue_strategy" AS ENUM ('LONGEST_IDLE_AGENT', 'ROUND_ROBIN', 'TOP_DOWN', 'AGENT_WITH_LEAST_TALK_TIME', 'AGENT_WITH_FEWEST_CALLS', 'SEQUENTIALLY_BY_AGENT_ORDER', 'RING_ALL', 'RING_PROGRESSIVELY'); -- CreateTable CREATE TABLE "queues" ( "id" UUID NOT NULL, "tenant_id" UUID NOT NULL, "name" TEXT NOT NULL, "description" TEXT, "strategy" "queue_strategy" NOT NULL DEFAULT 'LONGEST_IDLE_AGENT', "moh_sound" TEXT, "announce_sound" TEXT, "announce_frequency" INTEGER NOT NULL DEFAULT 0, "max_wait_time" INTEGER NOT NULL DEFAULT 0, "max_wait_time_with_no_agent" INTEGER NOT NULL DEFAULT 0, "agent_no_answer_status" TEXT, "tier_rules_apply" BOOLEAN NOT NULL DEFAULT false, "tier_rule_wait_second" INTEGER NOT NULL DEFAULT 300, "discard_abandoned_after" INTEGER NOT NULL DEFAULT 60, "abandoned_resume_allowed" BOOLEAN NOT NULL DEFAULT false, "skip_agents_with_external_calls" BOOLEAN NOT NULL DEFAULT true, "recording_enabled" BOOLEAN NOT NULL DEFAULT false, "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 "queues_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "queues_tenant_id_idx" ON "queues"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "queues_tenant_id_name_key" ON "queues"("tenant_id", "name"); -- AddForeignKey ALTER TABLE "queues" ADD CONSTRAINT "queues_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 "queues" ENABLE ROW LEVEL SECURITY; ALTER TABLE "queues" FORCE ROW LEVEL SECURITY; CREATE POLICY "tenant_isolation" ON "queues" USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid);