El PostAlerter contiene un sistema de verificaciones y desencadenadores para las notificaciones enviadas después de guardar una publicación regular, comenzando con el método after_save_post.
He estado lidiando con ese método para el plugin Follow (específicamente, consulte discourse-follow/plugin.rb at main · discourse/discourse-follow · GitHub) y tengo algunas reflexiones y preguntas sobre las que me gustaría conocer las opiniones de otros.
Dada la naturaleza del PostAlerter, creo que esta discusión va más allá del plugin Follow. Puedo ver que mis sugerencias a continuación serían relevantes para el plugin assign, el plugin polls, entre otros.
Mi enfoque actual es el siguiente (estaría encantado de crear un PR para cualquiera de los puntos siguientes):
-
Sería ideal incluir un hook o un desencadenador de eventos en el método
after_save_postque permita a los plugins agregar usuarios a los que enviar notificaciones (o no) dentro del contexto de las verificaciones y contadores de ese método. Al enviar una notificación, hay tres consideraciones clave:- ¿Debo enviar una notificación a un usuario sobre una publicación?
- ¿Ya he enviado una notificación a un usuario sobre una publicación?
- ¿Cómo debo notificar a un usuario sobre una publicación (es decir, respetando su configuración)?
Cada una de estas sería más fácil de evaluar dentro del contexto del método after_save_post.
-
Un uso ajustado de los tipos de notificación. Actualmente, el PostAlerter utiliza varios constantes de tipo de notificación que se iteran o filtran en verificaciones y contadores específicos, por ejemplo,
NOTIFIABLE_TYPESyCOLLAPSED_NOTIFIABLE_TYPES.Actualmente existe un tipo de notificación genérico
:custom, pero no es particularmente útil en el contexto de after_save_post, ya que agregarcustoma los constantes de tipo afectaría todos los usos del tipo de notificacióncustom.Cabe mencionar que el plugin assign actualmente utiliza el tipo de notificación :custom, pero solo lo usa para notificaciones sobre acciones pequeñas (no publicaciones regulares) y no lo utiliza en ninguna consulta (ya que cualquier plugin o servicio puede usarlo; en su lugar, utiliza el campo message para buscar notificaciones de asignación).