-- ============================================================ -- 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);