Merge branch 'develop' of ssh.gitgud.io:lambadalambda/pleroma into develop

This commit is contained in:
Roger Braun 2017-04-23 10:37:22 +02:00
commit 361a8c4219
9 changed files with 309 additions and 42 deletions

View file

@ -1,7 +1,8 @@
defmodule Pleroma.User do
use Ecto.Schema
import Ecto.Changeset
alias Pleroma.{Repo, User}
import Ecto.Query
alias Pleroma.{Repo, User, Activity, Object}
schema "users" do
field :bio, :string
@ -39,6 +40,22 @@ defmodule Pleroma.User do
|> validate_required([:following])
end
def user_info(%User{} = user) do
note_count_query = from a in Object,
where: fragment("? @> ?", a.data, ^%{actor: user.ap_id, type: "Note"}),
select: count(a.id)
follower_count_query = from u in User,
where: fragment("? @> ?", u.following, ^User.ap_followers(user)),
select: count(u.id)
%{
following_count: length(user.following),
note_count: Repo.one(note_count_query),
follower_count: Repo.one(follower_count_query)
}
end
def register_changeset(struct, params \\ %{}) do
changeset = struct
|> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation])
@ -62,22 +79,31 @@ defmodule Pleroma.User do
def follow(%User{} = follower, %User{} = followed) do
ap_followers = User.ap_followers(followed)
following = [ap_followers | follower.following]
|> Enum.uniq
if following?(follower, followed) do
{ :error,
"Could not follow user: #{followed.nickname} is already on your list." }
else
following = [ap_followers | follower.following]
|> Enum.uniq
follower
|> follow_changeset(%{following: following})
|> Repo.update
follower
|> follow_changeset(%{following: following})
|> Repo.update
end
end
def unfollow(%User{} = follower, %User{} = followed) do
ap_followers = User.ap_followers(followed)
following = follower.following
|> List.delete(ap_followers)
if following?(follower, followed) do
following = follower.following
|> List.delete(ap_followers)
follower
|> follow_changeset(%{following: following})
|> Repo.update
follower
|> follow_changeset(%{following: following})
|> Repo.update
else
{ :error, "Not subscribed!" }
end
end
def following?(%User{} = follower, %User{} = followed) do