Le modifiche non vengono salvate nella tabella user_actions

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_actions con action_type = 11.
  • Accedendo a /u/userB/notifications/edits, l’Utente B potrà vedere che l’Utente A ha effettuato una nuova modifica (questo dipende da user_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 dati user_action non 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 dati user_action sono 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_actions di 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_actions e farmi sapere?