chatwoot-develop/progresso/implementacao_reply.md

2.3 KiB

Implementação do Suporte Nativo a Reply

Objetivo

Migrar o sistema de respostas (relacionamento entre mensagens) de um campo flexível no JSON content_attributes para uma relação nativa no banco de dados usando a coluna in_reply_to_id.

Contexto

O Chatwoot estava utilizando o campo content_attributes['in_reply_to'] para armazenar o ID da mensagem respondida. Para seguir as melhores práticas solicitadas pelo arquiteto, implementamos uma relação belongs_to direta, garantindo maior integridade e performance.

Passos Realizados

  1. Criação da Migration: Adição da coluna in_reply_to_id na tabela messages com chave estrangeira e índice.
  2. Atualização do Modelo Message:
    • Inclusão da associação belongs_to :in_reply_to.
    • Remoção do acessório in_reply_to do store :content_attributes para evitar conflitos.
  3. Refatoração do InReplyToMessageBuilder: Atualização do builder central para preencher o novo campo.
  4. Ajuste no IncomingMessageWuzapiService: Mapeamento do WAID recebido via Wuzapi para o ID interno da mensagem e preenchimento da relação.
  5. Atualização da API: Inclusão do campo in_reply_to_id no partial de serialização das mensagens.
  6. Ajuste no Frontend:
    • MessageList.vue: Atualizado para detectar inReplyToId.
    • Base.vue: Refatorado para exibir o preview da mensagem citada de forma robusta.

Códigos e Arquivos Alterados

  • db/migrate/20260124190000_add_in_reply_to_id_to_messages.rb
  • app/models/message.rb
  • app/services/messages/in_reply_to_message_builder.rb
  • app/services/whatsapp/incoming_message_wuzapi_service.rb
  • app/views/api/v1/models/_message.json.jbuilder
  • app/javascript/dashboard/components-next/message/MessageList.vue
  • app/javascript/dashboard/components-next/message/bubbles/Base.vue

Como Validar ou Reverter

  • Validar:
    • Rodar bin/rails db:migrate.
    • Receber ou enviar uma resposta e verificar se Message.last.in_reply_to_id está preenchido.
    • Verificar no dashboard se o balão de resposta aparece com o preview correto.
  • Reverter:
    • Rodar bin/rails db:rollback.
    • Reverter as alterações nos arquivos alterados.

Variáveis de Ambiente

Nenhuma variável de ambiente adicional é necessária.