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