2018-12-14 17:41:55 +01:00
|
|
|
defmodule MobilizonWeb.API.Groups do
|
|
|
|
@moduledoc """
|
2019-09-22 16:26:23 +02:00
|
|
|
API for Groups.
|
2018-12-14 17:41:55 +01:00
|
|
|
"""
|
2019-09-22 16:26:23 +02:00
|
|
|
|
2018-12-14 17:41:55 +01:00
|
|
|
alias Mobilizon.Actors
|
2019-09-07 19:54:11 +02:00
|
|
|
alias Mobilizon.Actors.Actor
|
2018-12-14 17:41:55 +01:00
|
|
|
alias Mobilizon.Service.ActivityPub
|
2019-10-25 17:43:37 +02:00
|
|
|
alias Mobilizon.Service.ActivityPub.Activity
|
2018-12-14 17:41:55 +01:00
|
|
|
|
2019-03-19 11:16:03 +01:00
|
|
|
@doc """
|
|
|
|
Create a group
|
|
|
|
"""
|
2019-10-25 17:43:37 +02:00
|
|
|
@spec create_group(map()) :: {:ok, Activity.t(), Actor.t()} | any()
|
|
|
|
def create_group(args) do
|
|
|
|
with preferred_username <-
|
|
|
|
args |> Map.get(:preferred_username) |> HtmlSanitizeEx.strip_tags() |> String.trim(),
|
|
|
|
{:existing_group, nil} <-
|
|
|
|
{:existing_group, Actors.get_local_group_by_title(preferred_username)},
|
|
|
|
{:ok, %Activity{} = activity, %Actor{} = group} <- ActivityPub.create(:group, args, true) do
|
|
|
|
{:ok, activity, group}
|
2018-12-14 17:41:55 +01:00
|
|
|
else
|
|
|
|
{:existing_group, _} ->
|
2019-09-02 10:50:00 +02:00
|
|
|
{:error, "A group with this name already exists"}
|
2018-12-14 17:41:55 +01:00
|
|
|
|
2019-09-07 19:54:11 +02:00
|
|
|
{:is_owned, nil} ->
|
2019-09-02 10:50:00 +02:00
|
|
|
{:error, "Actor id is not owned by authenticated user"}
|
2018-12-14 17:41:55 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|