25 lines
792 B
Elixir
25 lines
792 B
Elixir
|
defmodule MobilizonWeb.API.Participations do
|
||
|
@moduledoc """
|
||
|
Common API to join events and groups
|
||
|
"""
|
||
|
|
||
|
alias Mobilizon.Actors.Actor
|
||
|
alias Mobilizon.Events.{Event, Participant}
|
||
|
alias Mobilizon.Service.ActivityPub
|
||
|
require Logger
|
||
|
|
||
|
@spec join(Event.t(), Actor.t()) :: {:ok, Participant.t()}
|
||
|
def join(%Event{id: event_id} = event, %Actor{id: actor_id} = actor) do
|
||
|
with {:error, :participant_not_found} <- Mobilizon.Events.get_participant(event_id, actor_id),
|
||
|
{:ok, activity, participant} <- ActivityPub.join(event, actor, true) do
|
||
|
{:ok, activity, participant}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def leave(%Event{} = event, %Actor{} = actor) do
|
||
|
with {:ok, activity, participant} <- ActivityPub.leave(event, actor, true) do
|
||
|
{:ok, activity, participant}
|
||
|
end
|
||
|
end
|
||
|
end
|