From a6a09aa740a1ffcb50410edfed0c1d966f600d26 Mon Sep 17 00:00:00 2001 From: Rafael Lopes Date: Mon, 25 May 2026 14:29:45 -0300 Subject: [PATCH] FEAT: Adicionado tabela para validar atividade do agente --- .../migrations/015_agent_presence_pause.sql | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 database/migrations/015_agent_presence_pause.sql diff --git a/database/migrations/015_agent_presence_pause.sql b/database/migrations/015_agent_presence_pause.sql new file mode 100644 index 0000000..4934dad --- /dev/null +++ b/database/migrations/015_agent_presence_pause.sql @@ -0,0 +1,52 @@ +-- ============================================================ +-- Migration 015: Presenca do agente e reserva de chamados em pausa +-- Tabelas: +-- agent_presence +-- whatsapp_chat_atribuicoes +-- ============================================================ + +CREATE TABLE IF NOT EXISTS agent_presence ( + user_id INTEGER PRIMARY KEY REFERENCES usuarios(id) ON DELETE CASCADE, + status VARCHAR(40) NOT NULL DEFAULT 'offline', + paused_at TIMESTAMP WITH TIME ZONE, + last_seen_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +); + +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pg_constraint + WHERE conname = 'chk_agent_presence_status' + ) THEN + ALTER TABLE agent_presence + ADD CONSTRAINT chk_agent_presence_status + CHECK (status IN ('available', 'paused', 'offline')); + END IF; +END $$; + +INSERT INTO agent_presence (user_id, status, last_seen_at, updated_at) +SELECT id, 'available', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP +FROM usuarios +ON CONFLICT (user_id) DO NOTHING; + +ALTER TABLE whatsapp_chat_atribuicoes + ADD COLUMN IF NOT EXISTS reserved_user_id INTEGER REFERENCES usuarios(id) ON DELETE SET NULL, + ADD COLUMN IF NOT EXISTS reserved_at TIMESTAMP WITH TIME ZONE, + ADD COLUMN IF NOT EXISTS pause_released_at TIMESTAMP WITH TIME ZONE; + +CREATE INDEX IF NOT EXISTS idx_agent_presence_status + ON agent_presence (status); + +CREATE INDEX IF NOT EXISTS idx_agent_presence_paused_at + ON agent_presence (paused_at) + WHERE status = 'paused'; + +CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_reserved_user + ON whatsapp_chat_atribuicoes (reserved_user_id, status) + WHERE reserved_user_id IS NOT NULL; + +CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_reserved_queue + ON whatsapp_chat_atribuicoes (area_id, status, reserved_user_id) + WHERE status = 'queued';