forked from AkkomaGang/akkoma
38 lines
944 B
Elixir
38 lines
944 B
Elixir
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
|