Acabei de perceber que ou não entendo totalmente os casos em que uma notificação de edição é criada, ou este é um problema muito mais generalizado do que eu pensava.
Principais suposições
Se o Usuário A edita algo escrito pelo Usuário B, várias coisas acontecem:
- Uma nova linha é adicionada à tabela
post_revisions. - Uma nova linha é adicionada à tabela
user_actionscomaction_type = 11. - Ao acessar
/u/userB/notifications/edits, o Usuário B poderá ver que uma nova edição foi feita pelo Usuário A (isso depende deuser_actions). - Ao clicar no ícone de lápis em sua postagem, o Usuário B poderá ver a edição real realizada pelo Usuário A (isso depende de
post_revisions).
Teste
Se as suposições acima estiverem corretas, esta consulta deve mostrar todas as linhas da tabela post_revisions para postagens criadas pelo Usuário B (neste caso, id 259) que foram editadas por qualquer usuário (exceto ele mesmo ou o usuário do sistema), juntamente com as linhas correspondentes em user_actions para action_type = 11.
with my_user_posts as (
select
p.id,
p.user_id
from
posts p
where
p.user_id = 259 -- escolha um id de usuário
)
select
up.user_id as my_user_id,
ua.user_id as target_user_id,
pr.post_id,
ua.target_post_id,
pr.user_id as editor_user_id,
ua.acting_user_id,
ua.action_type,
pr.created_at as edit_created_at,
ua.created_at as action_created_at
from
post_revisions pr
inner join my_user_posts up on up.id = pr.post_id
and up.user_id != pr.user_id -- sem autoedições
and pr.user_id != -1 -- sem edições do sistema
left join user_actions ua on ua.target_post_id = pr.post_id
and ua.action_type = 11 -- apenas ações de EDIÇÃO
order by
pr.post_id,
pr.created_at;
Saída esperada
Cada linha deve conter dados tanto de post_revisions quanto de user_actions.
Saída real
Algumas linhas de post_revisions não possuem dados correspondentes em user_actions. Portanto, o usuário pode ver as revisões clicando no lápis em cada postagem, mas não foi notificado sobre várias edições recebidas.
Coisas que tentei
- Adicionar uma edição adicional a uma postagem antiga sem dados de
user_action. Resultado: os dados deuser_actiontambém não apareceram. - Criar um usuário fictício, copiar o conteúdo pré-edição de uma postagem sem dados de
user_action, criar uma postagem com ele e aplicar a mesma edição que foi feita com outro usuário. Resultado: os dados deuser_actionapareceram corretamente. - Repetir os procedimentos acima quando o usuário está ativo ou offline. Resultado: nenhuma mudança.
- Repetir os procedimentos acima alterando o período de graça para edições. Resultado: nenhuma mudança.
Conclusões
-
O problema não parece ser:
- específico do usuário. Acontece com praticamente todos os usuários.
- específico da conexão. O fato de o usuário estar ativo ou offline não altera a saída.
- específico do tempo. Alterar o período de graça para edições não teve efeito.
-
O problema parece ser:
-
específico da ação. Não observei nenhum problema ao notificar nenhuma das outras ações (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION ou QUOTE). O único problema é com ações de EDIÇÃO.
-
específico da postagem. Não acontece com todas as postagens, apenas com algumas específicas (parece ser aleatório).
-
-
Uma possibilidade é que algo esteja acontecendo durante a criação de postagens específicas que impede que as ações de usuário de EDIÇÃO sejam salvas, mas não tenho ideia do que poderia ser isso.
-
Também é possível que isso esteja acontecendo por design e que existam condições específicas nas quais os usuários não são notificados sobre edições, mas não encontrei isso documentado em nenhum lugar.
Próximos passos
- Se você souber de algum motivo pelo qual as notificações de edição podem não ser acionadas toda vez que há uma edição, por favor, me avise.
- Se você tiver sua própria instância do Discourse, poderia executar a consulta SQL acima em alguns dos ids de usuário para ver se também observa dados ausentes de
user_actionse me relatar?
