42 lines
1.9 KiB
SQL
42 lines
1.9 KiB
SQL
-- ============================================================
|
|
-- Migration 006: Fila e controle de atribuicao do WhatsApp
|
|
-- Tabela: whatsapp_chat_atribuicoes
|
|
-- ============================================================
|
|
|
|
-- A atribuicao passa a representar dois estados principais:
|
|
-- 1. queued: conversa esta na fila de uma area, sem atendente definido
|
|
-- 2. assigned: conversa foi assumida ou transferida diretamente para um atendente
|
|
--
|
|
-- A janela de atendimento e controlada por expires_at. Ao expirar, a aplicacao
|
|
-- trata a proxima mensagem como um novo ciclo de conversa.
|
|
|
|
ALTER TABLE whatsapp_chat_atribuicoes
|
|
ALTER COLUMN user_id DROP NOT NULL,
|
|
ALTER COLUMN area_id DROP NOT NULL;
|
|
|
|
ALTER TABLE whatsapp_chat_atribuicoes
|
|
ADD COLUMN IF NOT EXISTS status VARCHAR(40) NOT NULL DEFAULT 'assigned',
|
|
ADD COLUMN IF NOT EXISTS conversation_started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
ADD COLUMN IF NOT EXISTS expires_at TIMESTAMP WITH TIME ZONE DEFAULT (CURRENT_TIMESTAMP + INTERVAL '24 hours'),
|
|
ADD COLUMN IF NOT EXISTS transfer_note TEXT,
|
|
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;
|
|
|
|
UPDATE whatsapp_chat_atribuicoes
|
|
SET
|
|
status = CASE
|
|
WHEN user_id IS NULL THEN 'queued'
|
|
ELSE 'assigned'
|
|
END,
|
|
conversation_started_at = COALESCE(conversation_started_at, assigned_at, CURRENT_TIMESTAMP),
|
|
expires_at = COALESCE(expires_at, assigned_at + INTERVAL '24 hours', CURRENT_TIMESTAMP + INTERVAL '24 hours'),
|
|
updated_at = COALESCE(updated_at, assigned_at, CURRENT_TIMESTAMP);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_area_status
|
|
ON whatsapp_chat_atribuicoes (area_id, status);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_user_status
|
|
ON whatsapp_chat_atribuicoes (user_id, status);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_expires_at
|
|
ON whatsapp_chat_atribuicoes (expires_at);
|