Purge Rejected Follow requests in daily task (#334)
[akkoma] / lib / pleroma / activity / pruner.ex
1 defmodule Pleroma.Activity.Pruner do
2 @moduledoc """
3 Prunes activities from the database.
4 """
5 @cutoff 30
6
7 alias Pleroma.Activity
8 alias Pleroma.Repo
9 import Ecto.Query
10
11 def prune_deletes do
12 before_time = cutoff()
13
14 from(a in Activity,
15 where: fragment("?->>'type' = ?", a.data, "Delete") and a.inserted_at < ^before_time
16 )
17 |> Repo.delete_all(timeout: :infinity)
18 end
19
20 def prune_undos do
21 before_time = cutoff()
22
23 from(a in Activity,
24 where: fragment("?->>'type' = ?", a.data, "Undo") and a.inserted_at < ^before_time
25 )
26 |> Repo.delete_all(timeout: :infinity)
27 end
28
29 def prune_removes do
30 before_time = cutoff()
31
32 from(a in Activity,
33 where: fragment("?->>'type' = ?", a.data, "Remove") and a.inserted_at < ^before_time
34 )
35 |> Repo.delete_all(timeout: :infinity)
36 end
37
38 def prune_stale_follow_requests do
39 before_time = cutoff()
40
41 from(a in Activity,
42 where:
43 fragment("?->>'type' = ?", a.data, "Follow") and a.inserted_at < ^before_time and
44 fragment("?->>'state' = ?", a.data, "reject")
45 )
46 |> Repo.delete_all(timeout: :infinity)
47 end
48
49 defp cutoff do
50 DateTime.utc_now() |> Timex.shift(days: -@cutoff)
51 end
52 end