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