mobilizon/lib/service/workers/background.ex

49 lines
1.5 KiB
Elixir

defmodule Mobilizon.Service.Workers.Background do
@moduledoc """
Worker to perform various actions in the background
"""
alias Mobilizon.Actors
alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub.Refresher
alias Mobilizon.Service.ActorSuspension
use Mobilizon.Service.Workers.Helper, queue: "background"
@impl Oban.Worker
@spec perform(Job.t()) ::
{:ok, Actor.t()}
| {:error,
:actor_not_found | :bad_option_value_for_reserve_username | Ecto.Changeset.t()}
def perform(%Job{args: %{"op" => "delete_actor", "actor_id" => actor_id} = args}) do
case Map.get(args, "reserve_username", true) do
reserve_username when is_boolean(reserve_username) ->
case Actors.get_actor(actor_id) do
%Actor{} = actor ->
ActorSuspension.suspend_actor(actor,
reserve_username: reserve_username,
suspension: Map.get(args, "suspension", false)
)
nil ->
{:error, :actor_not_found}
end
_ ->
{:error, :bad_option_value_for_reserve_username}
end
end
def perform(%Job{args: %{"op" => "actor_key_rotation", "actor_id" => actor_id}}) do
with %Actor{} = actor <- Actors.get_actor(actor_id) do
Actors.actor_key_rotation(actor)
end
end
def perform(%Job{args: %{"op" => "refresh_profile", "actor_id" => actor_id}}) do
with %Actor{} = actor <- Actors.get_actor(actor_id) do
Refresher.refresh_profile(actor)
end
end
end