43 lines
1.2 KiB
Elixir
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
|