0de8edd245b8e938c6b829e11387b0acd8c21eae
[akkoma] / lib / pleroma / workers / cron / purge_expired_activities_worker.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker do
6 @moduledoc """
7 The worker to purge expired activities.
8 """
9
10 use Oban.Worker, queue: "activity_expiration"
11
12 alias Pleroma.Activity
13 alias Pleroma.ActivityExpiration
14 alias Pleroma.Config
15 alias Pleroma.User
16 alias Pleroma.Web.CommonAPI
17
18 require Logger
19
20 @interval :timer.minutes(1)
21
22 @impl Oban.Worker
23 def perform(_job) do
24 if Config.get([ActivityExpiration, :enabled]) do
25 Enum.each(ActivityExpiration.due_expirations(@interval), &delete_activity/1)
26 end
27
28 after
29 :ok
30 end
31
32 def delete_activity(%ActivityExpiration{activity_id: activity_id}) do
33 with {:activity, %Activity{} = activity} <-
34 {:activity, Activity.get_by_id_with_object(activity_id)},
35 {:user, %User{} = user} <- {:user, User.get_by_ap_id(activity.object.data["actor"])} do
36 CommonAPI.delete(activity.id, user)
37 else
38 {:activity, _} ->
39 Logger.error(
40 "#{__MODULE__} Couldn't delete expired activity: not found activity ##{activity_id}"
41 )
42
43 {:user, _} ->
44 Logger.error(
45 "#{__MODULE__} Couldn't delete expired activity: not found actor of ##{activity_id}"
46 )
47 end
48 end
49 end