Ho appena realizzato che o non comprendo appieno i casi in cui viene creata una notifica di modifica, oppure questo è un problema molto più diffuso di quanto pensassi.
Ipotesi principali
Se l’Utente A modifica quanto scritto dall’Utente B, accadono diverse cose:
- Viene aggiunta una nuova riga alla tabella
post_revisions. - Viene aggiunta una nuova riga alla tabella
user_actionsconaction_type = 11. - Accedendo a
/u/userB/notifications/edits, l’Utente B potrà vedere che l’Utente A ha effettuato una nuova modifica (questo dipende dauser_actions). - Cliccando sull’icona della matita nel suo post, l’Utente B potrà vedere la modifica effettiva eseguita dall’Utente A (questo dipende da
post_revisions).
Test
Se le ipotesi sopra sono corrette, questa query dovrebbe mostrare tutte le righe nella tabella post_revisions per i post creati dall’Utente B (in questo caso, id 259) che sono stati modificati da qualsiasi utente (diverso da se stesso o dall’utente di sistema), assieme alle righe corrispondenti in user_actions per action_type = 11.
with my_user_posts as (
select
p.id,
p.user_id
from
posts p
where
p.user_id = 259 -- scegli un id utente
)
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 -- nessuna modifica a se stessi
and pr.user_id != -1 -- nessuna modifica di sistema
left join user_actions ua on ua.target_post_id = pr.post_id
and ua.action_type = 11 -- solo azioni di MODIFICA
order by
pr.post_id,
pr.created_at;
Output atteso
Ogni riga contiene sia i dati di post_revisions che quelli di user_actions.
Output effettivo
Alcune righe di post_revisions non hanno dati corrispondenti in user_actions. Di conseguenza, l’utente può vedere le revisioni cliccando sulla matina in ogni post, ma non è stato notificato di aver ricevuto diverse modifiche.
Cose che ho provato
- Aggiungere una modifica aggiuntiva a un vecchio post senza dati
user_action. Risultato: i datiuser_actionnon sono apparsi nemmeno in questo caso. - Creare un utente finto, copiare il contenuto pre-modifica di un post senza dati
user_action, creare un post con esso e applicare la stessa modifica eseguita con un utente diverso. Risultato: i datiuser_actionsono apparsi correttamente. - Ripetere le procedure sopra quando l’utente è attivo o offline. Risultato: nessuna variazione.
- Ripetere le procedure sopra modificando il periodo di grazia per le modifiche. Risultato: nessuna variazione.
Conclusioni
-
Il problema non sembra essere:
- specifico dell’utente. Si verifica praticamente con ogni utente.
- specifico della connessione. Il fatto che l’utente sia attivo o offline non cambia l’output.
- specifico del tempo. Modificare il periodo di grazia per le modifiche non ha avuto alcun effetto.
-
Il problema sembra essere
-
specifico dell’azione. Non ho riscontrato problemi con la notifica di altre azioni (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION o QUOTE). L’unico problema riguarda le azioni di MODIFICA.
-
specifico del post. Non si verifica con ogni post, solo con alcuni specifici (a quanto pare in modo casuale)
-
-
Una possibilità è che qualcosa accada durante la creazione di post specifici impedendo il salvataggio delle azioni
user_actionsdi tipo EDIT, ma non ho idea di cosa potrebbe essere. -
È anche possibile che ciò avvenga per progettazione e che esistano condizioni specifiche in cui gli utenti non vengono notificati delle modifiche, ma non ho trovato tale informazione documentata da nessuna parte.
Prossimi passi
- Se conosci un motivo per cui le notifiche di modifica potrebbero non essere attivate ogni volta che viene effettuata una modifica, fammelo sapere.
- Se hai la tua istanza di Discourse, potresti eseguire la query SQL sopra su alcuni dei tuoi id utente per verificare se anche tu vedi dati mancanti in
user_actionse farmi sapere?
