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