Refactor Mobilizon.Federation.ActivityPub and add typespecs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -6,39 +6,35 @@ defmodule Mobilizon.GraphQL.API.Groups do
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.Actors.Actor
|
||||
|
||||
alias Mobilizon.Federation.ActivityPub
|
||||
alias Mobilizon.Federation.ActivityPub.Activity
|
||||
alias Mobilizon.Federation.ActivityPub.{Actions, Activity}
|
||||
alias Mobilizon.Service.Formatter.HTML
|
||||
|
||||
@doc """
|
||||
Create a group
|
||||
"""
|
||||
@spec create_group(map) :: {:ok, Activity.t(), Actor.t()} | any
|
||||
@spec create_group(map) ::
|
||||
{:ok, Activity.t(), Actor.t()}
|
||||
| {:error, String.t() | Ecto.Changeset.t()}
|
||||
def create_group(args) do
|
||||
with preferred_username <-
|
||||
args |> Map.get(:preferred_username) |> HTML.strip_tags() |> String.trim(),
|
||||
{:existing_group, nil} <-
|
||||
{:existing_group, Actors.get_local_actor_by_name(preferred_username)},
|
||||
args <- args |> Map.put(:type, :Group),
|
||||
{:ok, %Activity{} = activity, %Actor{} = group} <-
|
||||
ActivityPub.create(:actor, args, true, %{"actor" => args.creator_actor.url}) do
|
||||
{:ok, activity, group}
|
||||
else
|
||||
{:existing_group, _} ->
|
||||
{:error, "A group with this name already exists"}
|
||||
preferred_username =
|
||||
args |> Map.get(:preferred_username) |> HTML.strip_tags() |> String.trim()
|
||||
|
||||
args = args |> Map.put(:type, :Group)
|
||||
|
||||
case Actors.get_local_actor_by_name(preferred_username) do
|
||||
nil ->
|
||||
Actions.Create.create(:actor, args, true, %{"actor" => args.creator_actor.url})
|
||||
|
||||
%Actor{} ->
|
||||
{:error, "A profile or group with that name already exists"}
|
||||
end
|
||||
end
|
||||
|
||||
@spec create_group(map) :: {:ok, Activity.t(), Actor.t()} | any
|
||||
@spec update_group(map) ::
|
||||
{:ok, Activity.t(), Actor.t()} | {:error, :group_not_found | Ecto.Changeset.t()}
|
||||
def update_group(%{id: id} = args) do
|
||||
with {:existing_group, {:ok, %Actor{type: :Group} = group}} <-
|
||||
{:existing_group, Actors.get_group_by_actor_id(id)},
|
||||
{:ok, %Activity{} = activity, %Actor{} = group} <-
|
||||
ActivityPub.update(group, args, true, %{"actor" => args.updater_actor.url}) do
|
||||
{:ok, activity, group}
|
||||
else
|
||||
{:existing_group, _} ->
|
||||
{:error, "A group with this name already exists"}
|
||||
with {:ok, %Actor{type: :Group} = group} <- Actors.get_group_by_actor_id(id) do
|
||||
Actions.Update.update(group, args, true, %{"actor" => args.updater_actor.url})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user