Make User.following a postgres array.
This commit is contained in:
parent
94db9ac4db
commit
f48bc5c3e1
|
@ -249,10 +249,9 @@ def get_or_fetch_by_nickname(nickname) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: these queries could be more efficient if the type in postgresql wasn't map, but array.
|
|
||||||
def get_followers(%User{id: id, follower_address: follower_address}) do
|
def get_followers(%User{id: id, follower_address: follower_address}) do
|
||||||
q = from u in User,
|
q = from u in User,
|
||||||
where: fragment("? @> ?", u.following, ^follower_address ),
|
where: ^follower_address in u.following,
|
||||||
where: u.id != ^id
|
where: u.id != ^id
|
||||||
|
|
||||||
{:ok, Repo.all(q)}
|
{:ok, Repo.all(q)}
|
||||||
|
@ -291,7 +290,7 @@ def update_note_count(%User{} = user) do
|
||||||
|
|
||||||
def update_follower_count(%User{} = user) do
|
def update_follower_count(%User{} = user) do
|
||||||
follower_count_query = from u in User,
|
follower_count_query = from u in User,
|
||||||
where: fragment("? @> ?", u.following, ^user.follower_address),
|
where: ^user.follower_address in u.following,
|
||||||
where: u.id != ^user.id,
|
where: u.id != ^user.id,
|
||||||
select: count(u.id)
|
select: count(u.id)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.MakeFollowingPostgresArray do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
alter table(:users) do
|
||||||
|
add :following_temp, {:array, :string}
|
||||||
|
end
|
||||||
|
|
||||||
|
execute """
|
||||||
|
update users set following_temp = array(select jsonb_array_elements_text(following));
|
||||||
|
"""
|
||||||
|
|
||||||
|
alter table(:users) do
|
||||||
|
remove :following
|
||||||
|
end
|
||||||
|
rename table(:users), :following_temp, to: :following
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue