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} -> worker = %{id: activity.id, actor_id: actor.id} |> Clacks.Worker.Federate.new() case Oban.insert(worker) do {:ok, _} -> {:ok, activity} {:error, changeset} -> Logger.error("Couldn't save federate job: #{inspect(changeset)}") :error end end end end