Atualizando Likes em `user_stats` no banco de dados via SQL

Olá a todos!

Existe algum lugar onde eu possa encontrar uma consulta pronta para atualizar likes_given e likes_received na tabela user_stats? Não tenho certeza de onde isso deveria vir, provavelmente algo baseado no que está nas tabelas user_actions e posts?

Isso é para uma migração onde já estou usando algumas consultas que peguei em um dos importadores, acredito:

UPDATE posts SET like_count = coalesce(cnt,0)
    FROM (
	SELECT post_id, count(*) cnt
	FROM post_actions
	WHERE post_action_type_id = 2 AND deleted_at IS NULL
	GROUP BY post_id
) x
WHERE posts.like_count <> x.cnt AND posts.id = x.post_id
UPDATE topics SET like_count = coalesce(cnt,0)
  FROM (
	SELECT topic_id, sum(like_count) cnt
	FROM posts
	WHERE deleted_at IS NULL
	GROUP BY topic_id
  ) x
WHERE topics.like_count <> x.cnt AND topics.id = x.topic_id

Isso atualiza as contagens de curtidas em posts e topics, mas não em user_stats

Você precisará fazer isso no Rails ou em um plugin. O Data Explorer não pode alterar dados.

Você precisará analisar o código nos modelos de usuário ou de estatísticas de usuário.

Estou usando o DBeaver e consigo executar consultas UPDATE. Achei que o “Explorador de dados” fosse apenas outro cliente de banco de dados equivalente, peço desculpas pela confusão. Acho que isso não pertence aqui então, se um administrador quiser dividir essas postagens em um tópico separado, tudo bem. Sugiro um título como Atualizando likes em user_stats via SQL.

Elaborei o seguinte, mas não tenho certeza se estão corretas. Adoraria verificar encontrando algum lugar onde isso já tenha sido feito por alguém mais experiente, mas não consigo encontrar :slightly_frowning_face:

UPDATE user_stats SET likes_given = coalesce(cnt,0)
    FROM (
   SELECT user_id, count(*) cnt
   FROM post_actions
   WHERE post_action_type_id = 2 AND deleted_at IS NULL
   GROUP BY user_id
) x
WHERE user_stats.likes_given <> x.cnt 
         AND user_stats.user_id = x.user_id
UPDATE user_stats SET likes_received = coalesce(cnt,0)
     FROM (
	SELECT posts.user_id, SUM(posts.like_count) cnt
	FROM post_actions
	LEFT JOIN posts ON post_actions.post_id = posts.id
	WHERE post_action_type_id = 2 AND post_actions.deleted_at IS NULL
	GROUP BY posts.user_id
) x
WHERE user_stats.likes_received <> x.cnt 
       AND user_stats.user_id = x.user_id