2.3 KiB
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
- Criação da Migration: Adição da coluna
in_reply_to_idna tabelamessagescom chave estrangeira e índice. - Atualização do Modelo
Message:- Inclusão da associação
belongs_to :in_reply_to. - Remoção do acessório
in_reply_todostore :content_attributespara evitar conflitos.
- Inclusão da associação
- Refatoração do
InReplyToMessageBuilder: Atualização do builder central para preencher o novo campo. - Ajuste no
IncomingMessageWuzapiService: Mapeamento doWAIDrecebido via Wuzapi para o ID interno da mensagem e preenchimento da relação. - Atualização da API: Inclusão do campo
in_reply_to_idno partial de serialização das mensagens. - Ajuste no Frontend:
MessageList.vue: Atualizado para detectarinReplyToId.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.rbapp/models/message.rbapp/services/messages/in_reply_to_message_builder.rbapp/services/whatsapp/incoming_message_wuzapi_service.rbapp/views/api/v1/models/_message.json.jbuilderapp/javascript/dashboard/components-next/message/MessageList.vueapp/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_idestá preenchido. - Verificar no dashboard se o balão de resposta aparece com o preview correto.
- Rodar
- Reverter:
- Rodar
bin/rails db:rollback. - Reverter as alterações nos arquivos alterados.
- Rodar
Variáveis de Ambiente
Nenhuma variável de ambiente adicional é necessária.