Add ability to delete a group

This commit is contained in:
Chocobozzz
2019-01-25 09:23:44 +01:00
parent c0628a1566
commit 8388240957
8 changed files with 145 additions and 2 deletions

View File

@@ -3,7 +3,7 @@ defmodule MobilizonWeb.Resolvers.Group do
Handles the group-related GraphQL calls
"""
alias Mobilizon.Actors
alias Mobilizon.Actors.{Actor}
alias Mobilizon.Actors.{Actor, User, Member}
alias Mobilizon.Service.ActivityPub
alias Mobilizon.Activity
require Logger
@@ -68,4 +68,41 @@ defmodule MobilizonWeb.Resolvers.Group do
def create_group(_parent, _args, _resolution) do
{:error, "You need to be logged-in to create a group"}
end
@doc """
Delete an existing group
"""
def delete_group(
_parent,
%{group_id: group_id, actor_id: actor_id},
%{
context: %{
current_user: user
}
}
) do
with {:ok, %Actor{} = group} <- Actors.find_group_by_actor_id(group_id),
{:is_owned, true} <- User.owns_actor(user, actor_id),
{:ok, %Member{} = member} <- Member.get_member(actor_id, group.id),
{:is_admin, true} <- Member.is_administrator(member),
group <- Actors.delete_group!(group) do
{:ok, %{id: group.id}}
else
{:error, :group_not_found} ->
{:error, "Group with preferred username not found"}
{:is_owned, false} ->
{:error, "Actor id is not owned by authenticated user"}
{:error, :member_not_found} ->
{:error, "Actor id is not a member of this group"}
{:is_admin, false} ->
{:error, "User is not an administrator of the selected group"}
end
end
def delete_group(_parent, _args, _resolution) do
{:error, "You need to be logged-in to delete a group"}
end
end

View File

@@ -20,6 +20,11 @@ defmodule MobilizonWeb.Schema do
alias MobilizonWeb.Resolvers
@desc "A struct containing the id of the deleted object"
object :deleted_object do
field(:id, :integer)
end
@desc "A JWT and the associated user ID"
object :login do
field(:token, non_null(:string), description: "A JWT Token for this session")
@@ -301,6 +306,14 @@ defmodule MobilizonWeb.Schema do
resolve(&Resolvers.Group.create_group/3)
end
@desc "Delete a group"
field :delete_group, :deleted_object do
arg(:group_id, non_null(:integer))
arg(:actor_id, non_null(:integer))
resolve(&Resolvers.Group.delete_group/3)
end
# @desc "Upload a picture"
# field :upload_picture, :picture do
# arg(:file, non_null(:upload))