Add backend for accepting a group invitation

For #887
This commit is contained in:
Massedil
2025-11-04 23:39:05 +01:00
committed by setop
parent 569222fcff
commit 16a4e4a5bc
3 changed files with 45 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Invitation do
alias Mobilizon.Actors
alias Mobilizon.Actors.Actor
alias Mobilizon.Invitation
alias Mobilizon.Invitations
import Mobilizon.Web.Gettext
@@ -54,4 +55,33 @@ defmodule Mobilizon.GraphQL.Resolvers.Invitation do
Invitations.delete_invitation_by_token(group_id, token)
end
end
def accept_invitation_token(
_parent,
%{group_id: group_id, token: token, actor_id: actor_id_chosen},
%{
context: %{current_actor: %Actor{id: actor_id_connected}}
}
) do
with true <-
String.to_integer(actor_id_chosen) == actor_id_connected ||
{:error, "You can only accept invitations for your own account"},
%Invitation{} = _invitation <-
Invitations.find_invitation(group_id, token) ||
{:error, "Invalid invitation token for this group"},
false <-
Mobilizon.Actors.member?(actor_id_connected, group_id),
{:ok, member} <-
Mobilizon.Actors.create_member(%{
role: :member,
parent_id: group_id,
actor_id: actor_id_connected
}) do
{:ok, member}
else
{:error, _} = error -> error
true -> {:error, "You are already a member of this group"}
_ -> {:error, "Unexpected error"}
end
end
end