Fixing up deletes a bit (#327)
[akkoma] / lib / pleroma / object / pruner.ex
1 defmodule Pleroma.Object.Pruner do
2 @moduledoc """
3 Prunes objects from the database.
4 """
5 @cutoff 30
6
7 alias Pleroma.Object
8 alias Pleroma.Delivery
9 alias Pleroma.Repo
10 import Ecto.Query
11
12 def prune_tombstoned_deliveries do
13 from(d in Delivery)
14 |> join(:inner, [d], o in Object, on: d.object_id == o.id)
15 |> where([d, o], fragment("?->>'type' = ?", o.data, "Tombstone"))
16 |> Repo.delete_all(timeout: :infinity)
17 end
18
19 def prune_tombstones do
20 before_time = cutoff()
21
22 from(o in Object,
23 where: fragment("?->>'type' = ?", o.data, "Tombstone") and o.inserted_at < ^before_time
24 )
25 |> Repo.delete_all(timeout: :infinity, on_delete: :delete_all)
26 end
27
28 defp cutoff do
29 DateTime.utc_now() |> Timex.shift(days: -@cutoff)
30 end
31 end