Después de actualizar nuestra instancia de Discourse, aparentemente tenemos cantidades incorrectas de “resueltos” al ver los resúmenes de perfil. Ejemplo:
Hay algunas discrepancias en el recuento de soluciones en Discourse, ya que estábamos incluyendo temas y publicaciones que ya han sido eliminadas.
Antes de la migración, indicábamos:
John tiene 27 soluciones porque la gente marcó su publicación como solución 27 veces.
Esto se almacena en la tabla UserActions.
Después de la migración, ahora contamos:
John tiene 20 soluciones porque hay 20 temas donde sus publicaciones son soluciones.
Esto se almacena en la tabla SolvedTopics y tiene un enlace directo a un tema existente y no eliminado.
Hay una diferencia sutil aquí: en el primer escenario, no había validaciones para verificar si la publicación de la solución o su tema aún existían.
Consultaré con nuestro equipo cuál es el mejor número para mostrar. Personalmente, me inclino por contar las soluciones para los temas que aún existen.
Estoy bastante seguro de que este no puede ser el problema, ya que solo causaría menos números en lugar de más en algunos casos, ¿correcto? Tengo otro ejemplo para ti:
-> Incorrecto: Profile - SGS - Garuda Linux Forum
-> Correcto:
Me parece imposible que este mecanismo de conteo pueda duplicar la cantidad de publicaciones resueltas. Además de eso (por supuesto, no confirmado), dudo mucho que el número de publicaciones eliminadas fuera tan alto en mi ejemplo anterior.
Creo que acabo de encontrar el error (aunque la afirmación sobre la discrepancia que mencioné anteriormente sigue siendo cierta) –
En la implementación anterior, el recuento de soluciones en el resumen de John se cuenta por el número de veces que alguien marcó la publicación de John como solución
def solved_count
UserAction.where(user: @user).where(action_type: UserAction::SOLVED).count
end
En la nueva implementación, el recuento de soluciones en el resumen de usuario de John es el número de veces que John marcó una publicación como solución
def solved_count
DiscourseSolved::SolvedTopic.where(accepter: @user).count
end
Esto explica la gran diferencia. “Recuento de soluciones” cambió de definición de “cuántas veces respondiste” a “cuántas veces aceptaste”.
Corregiré el error, ¡gracias de nuevo por el informe!
También actualizaré los diferentes métodos de conteo utilizados en la ventana emergente del perfil y el resumen del usuario.
Felicitaciones a @ondrej por mencionarme también Solution badge not working?. Parece que algunas discrepancias ya estaban ocurriendo antes de esta migración. Lo bueno es que migraremos a un número más consistente en Discourse y nuestros plugins.