defmodule Pleroma.Repo.Migrations.RemoveUnreadConversationCountFromUser do use Ecto.Migration import Ecto.Query alias Pleroma.Repo def up do alter table(:users) do remove_if_exists(:unread_conversation_count, :integer) end end def down do alter table(:users) do add_if_not_exists(:unread_conversation_count, :integer, default: 0) end flush() recalc_unread_conversation_count() end defp recalc_unread_conversation_count do participations_subquery = from( p in "conversation_participations", where: p.read == false, group_by: p.user_id, select: %{user_id: p.user_id, unread_conversation_count: count(p.id)} ) from( u in "users", join: p in subquery(participations_subquery), on: p.user_id == u.id, update: [set: [unread_conversation_count: p.unread_conversation_count]] ) |> Repo.update_all([]) end end