Various refactoring and typespec improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -12,15 +12,22 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do
|
||||
use Mobilizon.Service.Workers.Helper, queue: "activity"
|
||||
|
||||
@impl Oban.Worker
|
||||
@spec perform(Job.t()) :: {:ok, Activity.t()} | {:error, Ecto.Changeset.t()}
|
||||
def perform(%Job{args: args}) do
|
||||
with {"build_activity", args} <- Map.pop(args, "op"),
|
||||
{:ok, %Activity{} = activity} <- build_activity(args),
|
||||
preloaded_activity <- Activities.preload_activity(activity) do
|
||||
notify_activity(preloaded_activity)
|
||||
{"build_activity", args} = Map.pop(args, "op")
|
||||
|
||||
case build_activity(args) do
|
||||
{:ok, %Activity{} = activity} ->
|
||||
activity
|
||||
|> Activities.preload_activity()
|
||||
|> notify_activity()
|
||||
|
||||
{:error, %Ecto.Changeset{} = err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
|
||||
@spec build_activity(map()) :: {:ok, Activity.t()}
|
||||
@spec build_activity(map()) :: {:ok, Activity.t()} | {:error, Ecto.Changeset.t()}
|
||||
def build_activity(args) do
|
||||
Activities.create_activity(args)
|
||||
end
|
||||
|
||||
@@ -11,11 +11,23 @@ defmodule Mobilizon.Service.Workers.Background do
|
||||
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
|
||||
with reserve_username when is_boolean(reserve_username) <-
|
||||
Map.get(args, "reserve_username", true),
|
||||
%Actor{} = actor <- Actors.get_actor(actor_id) do
|
||||
ActorSuspension.suspend_actor(actor, reserve_username: reserve_username)
|
||||
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)
|
||||
|
||||
nil ->
|
||||
{:error, :actor_not_found}
|
||||
end
|
||||
|
||||
_ ->
|
||||
{:error, :bad_option_value_for_reserve_username}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -4,11 +4,12 @@ defmodule Mobilizon.Service.Workers.CleanOrphanMediaWorker do
|
||||
"""
|
||||
|
||||
use Oban.Worker, queue: "background"
|
||||
alias Mobilizon.Config
|
||||
alias Mobilizon.Service.CleanOrphanMedia
|
||||
|
||||
@impl Oban.Worker
|
||||
def perform(%Job{}) do
|
||||
if Mobilizon.Config.get!([:instance, :remove_orphan_uploads]) and should_perform?() do
|
||||
if Keyword.get(Config.instance_config(), :remove_orphan_uploads, false) and should_perform?() do
|
||||
CleanOrphanMedia.clean()
|
||||
end
|
||||
end
|
||||
@@ -17,8 +18,7 @@ defmodule Mobilizon.Service.Workers.CleanOrphanMediaWorker do
|
||||
defp should_perform? do
|
||||
case Cachex.get(:key_value, "last_media_cleanup") do
|
||||
{:ok, %DateTime{} = last_media_cleanup} ->
|
||||
default_grace_period =
|
||||
Mobilizon.Config.get([:instance, :orphan_upload_grace_period_hours], 48)
|
||||
default_grace_period = Config.get([:instance, :orphan_upload_grace_period_hours], 48)
|
||||
|
||||
DateTime.compare(
|
||||
last_media_cleanup,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
defmodule Mobilizon.Service.Workers.CleanUnconfirmedUsersWorker do
|
||||
defmodule Mobilizon.Service.Workers.CleanSuspendedActors do
|
||||
@moduledoc """
|
||||
Worker to clean unattached media
|
||||
"""
|
||||
|
||||
@@ -11,6 +11,7 @@ defmodule Mobilizon.Service.Workers.Helper do
|
||||
alias Mobilizon.Config
|
||||
alias Mobilizon.Service.Workers.Helper
|
||||
|
||||
@spec worker_args(atom()) :: Keyword.t()
|
||||
def worker_args(queue) do
|
||||
case Config.get([:workers, :retries, queue]) do
|
||||
nil -> []
|
||||
@@ -18,6 +19,7 @@ defmodule Mobilizon.Service.Workers.Helper do
|
||||
end
|
||||
end
|
||||
|
||||
@spec sidekiq_backoff(integer, integer, integer) :: integer
|
||||
def sidekiq_backoff(attempt, pow \\ 4, base_backoff \\ 15) do
|
||||
backoff =
|
||||
:math.pow(attempt, pow) +
|
||||
@@ -39,6 +41,8 @@ defmodule Mobilizon.Service.Workers.Helper do
|
||||
|
||||
alias Oban.Job
|
||||
|
||||
@spec enqueue(String.t(), map(), Keyword.t()) ::
|
||||
{:ok, Job.t()} | {:error, Ecto.Changeset.t()}
|
||||
def enqueue(operation, params, worker_args \\ []) do
|
||||
params = Map.merge(%{"op" => operation}, params)
|
||||
queue_atom = String.to_existing_atom(unquote(queue))
|
||||
|
||||
@@ -13,17 +13,16 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do
|
||||
|
||||
@impl Oban.Worker
|
||||
def perform(%Job{args: args}) do
|
||||
with {"legacy_notify", args} <- Map.pop(args, "op") do
|
||||
activity = build_activity(args)
|
||||
{"legacy_notify", args} = Map.pop(args, "op")
|
||||
activity = build_activity(args)
|
||||
|
||||
if args["subject"] == "participation_event_comment" do
|
||||
notify_anonymous_participants(get_in(args, ["subject_params", "event_id"]), activity)
|
||||
end
|
||||
|
||||
args
|
||||
|> users_to_notify(author_id: args["author_id"], group_id: Map.get(args, "group_id"))
|
||||
|> Enum.each(&Notifier.notify(&1, activity, single_activity: true))
|
||||
if args["subject"] == "participation_event_comment" do
|
||||
notify_anonymous_participants(get_in(args, ["subject_params", "event_id"]), activity)
|
||||
end
|
||||
|
||||
args
|
||||
|> users_to_notify(author_id: args["author_id"], group_id: Map.get(args, "group_id"))
|
||||
|> Enum.each(&Notifier.notify(&1, activity, single_activity: true))
|
||||
end
|
||||
|
||||
defp build_activity(args) do
|
||||
@@ -105,8 +104,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do
|
||||
is_map(metadata) && is_binary(metadata.email)
|
||||
end)
|
||||
|> Enum.map(fn %Participant{metadata: metadata} -> metadata end)
|
||||
|> Enum.map(fn metadata ->
|
||||
Notifier.Email.send_anonymous_activity(metadata.email, activity,
|
||||
|> Enum.map(fn %{email: email} = metadata ->
|
||||
Notifier.Email.send_anonymous_activity(email, activity,
|
||||
locale: Map.get(metadata, :locale, "en")
|
||||
)
|
||||
end)
|
||||
|
||||
@@ -13,9 +13,9 @@ defmodule Mobilizon.Service.Workers.SendActivityRecapWorker do
|
||||
|
||||
import Mobilizon.Service.DateTime,
|
||||
only: [
|
||||
is_between_hours: 1,
|
||||
is_between_hours_on_first_day: 1,
|
||||
is_delay_ok_since_last_notification_sent: 1
|
||||
is_between_hours?: 1,
|
||||
is_between_hours_on_first_day?: 1,
|
||||
is_delay_ok_since_last_notification_sent?: 1
|
||||
]
|
||||
|
||||
@impl Oban.Worker
|
||||
@@ -86,7 +86,7 @@ defmodule Mobilizon.Service.Workers.SendActivityRecapWorker do
|
||||
group_notifications: :one_hour
|
||||
}
|
||||
}) do
|
||||
is_delay_ok_since_last_notification_sent(last_notification_sent)
|
||||
is_delay_ok_since_last_notification_sent?(last_notification_sent)
|
||||
end
|
||||
|
||||
# If we're between notification hours
|
||||
@@ -96,7 +96,7 @@ defmodule Mobilizon.Service.Workers.SendActivityRecapWorker do
|
||||
timezone: timezone
|
||||
}
|
||||
}) do
|
||||
is_between_hours(timezone: timezone || "Etc/UTC")
|
||||
is_between_hours?(timezone: timezone || "Etc/UTC")
|
||||
end
|
||||
|
||||
# If we're on the first day of the week between notification hours
|
||||
@@ -107,6 +107,6 @@ defmodule Mobilizon.Service.Workers.SendActivityRecapWorker do
|
||||
timezone: timezone
|
||||
}
|
||||
}) do
|
||||
is_between_hours_on_first_day(timezone: timezone || "Etc/UTC", locale: locale)
|
||||
is_between_hours_on_first_day?(timezone: timezone || "Etc/UTC", locale: locale)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user