clacks/lib/clacks/activitypub/helper.ex

43 lines
1.2 KiB
Elixir

defmodule Clacks.ActivityPub.Helper do
alias Clacks.{Activity, Actor, Repo}
require Logger
@spec save_and_federate(activity_data :: map(), actor :: Actor.t()) ::
{:ok, Activity.t()} | :error
def save_and_federate(activity_data, actor) do
changeset = Activity.changeset_for_creating(activity_data, true)
case Repo.insert(changeset) do
{:error, changeset} ->
Logger.error("Couldn't save activity: #{inspect(changeset)}")
:error
{:ok, activity} ->
if Application.get_env(:clacks, :send_webmentions, true) do
Clacks.Worker.SendWebmention.enqueue_for_activity(activity)
end
case enqueue_federate_job(activity, actor) do
:ok -> {:ok, activity}
:error -> :error
end
end
end
@spec enqueue_federate_job(Activity.t(), Actor.t()) :: :ok | :error
defp enqueue_federate_job(activity, actor) do
worker =
%{id: activity.id, actor_id: actor.id}
|> Clacks.Worker.Federate.new()
case Oban.insert(worker) do
{:ok, _} ->
:ok
{:error, changeset} ->
Logger.error("Couldn't save federate job: #{inspect(changeset)}")
:error
end
end
end