clacks/lib/clacks/activitypub/helper.ex

31 lines
858 B
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} ->
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