diff options
author | Ivan Tashkinov <ivantashkinov@gmail.com> | 2019-02-19 19:10:55 +0300 |
---|---|---|
committer | Ivan Tashkinov <ivantashkinov@gmail.com> | 2019-02-19 19:10:55 +0300 |
commit | c0ecbf6669948740a091bdf5b5441fb6ee55f4fc (patch) | |
tree | 9ad9fadc6855b1529df7ce8403683c32f776265b /lib/pleroma/user.ex | |
parent | d3fe2c8ec6116fbc3058f7a795ef59564bddfb08 (diff) | |
parent | 1dd718e83c76db218f12a98344b568fe10ecbefe (diff) | |
download | pleroma-c0ecbf6669948740a091bdf5b5441fb6ee55f4fc.tar.gz |
[#468] Merged `upstream/develop`.
Diffstat (limited to 'lib/pleroma/user.ex')
-rw-r--r-- | lib/pleroma/user.ex | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3c6a9953d..18bb56667 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -237,6 +237,7 @@ defmodule Pleroma.User do changeset |> put_change(:password_hash, hashed) |> put_change(:ap_id, ap_id) + |> unique_constraint(:ap_id) |> put_change(:following, [followers]) |> put_change(:follower_address, followers) else @@ -619,6 +620,32 @@ defmodule Pleroma.User do ) end + def update_follow_request_count(%User{} = user) do + subquery = + user + |> User.get_follow_requests_query() + |> select([a], %{count: count(a.id)}) + + User + |> where(id: ^user.id) + |> join(:inner, [u], s in subquery(subquery)) + |> update([u, s], + set: [ + info: + fragment( + "jsonb_set(?, '{follow_request_count}', ?::varchar::jsonb, true)", + u.info, + s.count + ) + ] + ) + |> Repo.update_all([], returning: true) + |> case do + {1, [user]} -> {:ok, user} + _ -> {:error, user} + end + end + def get_follow_requests(%User{} = user) do q = get_follow_requests_query(user) reqs = Repo.all(q) @@ -1174,7 +1201,7 @@ defmodule Pleroma.User do {:ok, updated_user} = user |> change(%{tags: new_tags}) - |> Repo.update() + |> update_and_set_cache() updated_user end |