@@ -82,10 +82,10 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@spec get_actor_with_preload!(integer | String.t(), boolean) :: Actor.t()
|
||||
def get_actor_with_preload!(id, include_suspended \\ false) do
|
||||
@spec get_actor_with_preload!(integer | String.t()) :: Actor.t()
|
||||
def get_actor_with_preload!(id) do
|
||||
id
|
||||
|> actor_with_preload_query(include_suspended)
|
||||
|> actor_with_preload_query(false)
|
||||
|> Repo.one!()
|
||||
end
|
||||
|
||||
@@ -100,14 +100,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@spec get_remote_actor_with_preload(integer | String.t(), boolean()) :: Actor.t() | nil
|
||||
def get_remote_actor_with_preload(id, include_suspended \\ false) do
|
||||
id
|
||||
|> actor_with_preload_query(include_suspended)
|
||||
|> filter_external()
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets an actor by its URL (ActivityPub ID). The `:preload` option allows to
|
||||
preload the followers relation.
|
||||
@@ -131,11 +123,9 @@ defmodule Mobilizon.Actors do
|
||||
New function to replace `Mobilizon.Actors.get_actor_by_url/1` with
|
||||
better signature
|
||||
"""
|
||||
@spec get_actor_by_url_2(String.t(), boolean) :: Actor.t() | nil
|
||||
def get_actor_by_url_2(url, preload \\ false) do
|
||||
Actor
|
||||
|> Repo.get_by(url: url)
|
||||
|> preload_followers(preload)
|
||||
@spec get_actor_by_url_2(String.t()) :: Actor.t() | nil
|
||||
def get_actor_by_url_2(url) do
|
||||
Repo.get_by(Actor, url: url)
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -495,16 +485,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a local group by its title.
|
||||
"""
|
||||
@spec get_local_group_by_title(String.t()) :: Actor.t() | nil
|
||||
def get_local_group_by_title(title) do
|
||||
group_query()
|
||||
|> filter_by_name([title])
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a group by its actor id.
|
||||
"""
|
||||
@@ -575,11 +555,6 @@ defmodule Mobilizon.Actors do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a group.
|
||||
"""
|
||||
def delete_group!(%Actor{type: :Group} = group), do: Repo.delete!(group)
|
||||
|
||||
@doc """
|
||||
Counts the local groups
|
||||
"""
|
||||
@@ -599,15 +574,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.aggregate(:count)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Lists the groups.
|
||||
"""
|
||||
@spec list_groups(integer | nil, integer | nil) :: Page.t()
|
||||
def list_groups(page \\ nil, limit \\ nil) do
|
||||
groups_query()
|
||||
|> Page.build_page(page, limit)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Lists the groups.
|
||||
"""
|
||||
@@ -620,10 +586,10 @@ defmodule Mobilizon.Actors do
|
||||
@doc """
|
||||
Lists the groups.
|
||||
"""
|
||||
@spec list_external_groups(non_neg_integer()) :: list(Actor.t())
|
||||
def list_external_groups(limit \\ 100) when limit > 0 do
|
||||
@spec list_external_groups :: list(Actor.t())
|
||||
def list_external_groups do
|
||||
external_groups_query()
|
||||
|> limit(^limit)
|
||||
|> limit(100)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@@ -833,30 +799,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@spec list_local_members_for_group(Actor.t(), integer | nil, integer | nil) ::
|
||||
Page.t(Member.t())
|
||||
def list_local_members_for_group(
|
||||
%Actor{id: group_id, type: :Group} = _group,
|
||||
page \\ nil,
|
||||
limit \\ nil
|
||||
) do
|
||||
group_id
|
||||
|> group_internal_member_query()
|
||||
|> Page.build_page(page, limit)
|
||||
end
|
||||
|
||||
@spec list_remote_members_for_group(Actor.t(), integer | nil, integer | nil) ::
|
||||
Page.t(Member.t())
|
||||
def list_remote_members_for_group(
|
||||
%Actor{id: group_id, type: :Group} = _group,
|
||||
page \\ nil,
|
||||
limit \\ nil
|
||||
) do
|
||||
group_id
|
||||
|> group_external_member_query()
|
||||
|> Page.build_page(page, limit)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns a paginated list of members for a group.
|
||||
"""
|
||||
@@ -888,17 +830,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns a paginated list of administrator members for a group.
|
||||
"""
|
||||
@spec list_administrator_members_for_group(integer | String.t(), integer | nil, integer | nil) ::
|
||||
Page.t()
|
||||
def list_administrator_members_for_group(id, page \\ nil, limit \\ nil) do
|
||||
id
|
||||
|> administrator_members_for_group_query()
|
||||
|> Page.build_page(page, limit)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the complete list of administrator members for a group.
|
||||
"""
|
||||
@@ -1012,12 +943,6 @@ defmodule Mobilizon.Actors do
|
||||
@spec delete_bot(Bot.t()) :: {:ok, Bot.t()} | {:error, Ecto.Changeset.t()}
|
||||
def delete_bot(%Bot{} = bot), do: Repo.delete(bot)
|
||||
|
||||
@doc """
|
||||
Returns the list of bots.
|
||||
"""
|
||||
@spec list_bots :: [Bot.t()]
|
||||
def list_bots, do: Repo.all(Bot)
|
||||
|
||||
@doc """
|
||||
Gets a single follower.
|
||||
"""
|
||||
@@ -1105,17 +1030,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Repo.delete()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of followers for an actor.
|
||||
If actor A and C both follow actor B, actor B's followers are A and C.
|
||||
"""
|
||||
@spec list_followers_actors_for_actor(Actor.t()) :: [Actor.t()]
|
||||
def list_followers_actors_for_actor(%Actor{id: actor_id}) do
|
||||
actor_id
|
||||
|> follower_actors_for_actor_query()
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of external followers for an actor.
|
||||
"""
|
||||
@@ -1177,17 +1091,6 @@ defmodule Mobilizon.Actors do
|
||||
|> Page.build_page(page, limit)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of followings for an actor.
|
||||
If actor A follows actor B and C, actor A's followings are B and C.
|
||||
"""
|
||||
@spec list_followings_for_actor(Actor.t()) :: [Follower.t()]
|
||||
def list_followings_for_actor(%Actor{id: actor_id}) do
|
||||
actor_id
|
||||
|> followings_actors_for_actor_query()
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the number of followings for an actor
|
||||
"""
|
||||
@@ -1485,16 +1388,6 @@ defmodule Mobilizon.Actors do
|
||||
|> select([_m, a], a)
|
||||
end
|
||||
|
||||
@spec group_external_member_query(integer()) :: Ecto.Query.t()
|
||||
defp group_external_member_query(group_id) do
|
||||
Member
|
||||
|> where([m], m.parent_id == ^group_id)
|
||||
|> join(:inner, [m], a in Actor, on: m.actor_id == a.id)
|
||||
|> where([_m, a], not is_nil(a.domain))
|
||||
|> preload([m], [:parent, :actor])
|
||||
|> select([m, _a], m)
|
||||
end
|
||||
|
||||
@spec group_internal_member_actor_query(integer(), list()) :: Ecto.Query.t()
|
||||
defp group_internal_member_actor_query(group_id, role) do
|
||||
Member
|
||||
|
||||
Reference in New Issue
Block a user