47 lines
2.3 KiB
Markdown
47 lines
2.3 KiB
Markdown
# 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.
|