forked from AkkomaGang/akkoma
floatingghost
6b882a2c0b
Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk> Reviewed-on: AkkomaGang/akkoma#334
52 lines
1.2 KiB
Elixir
52 lines
1.2 KiB
Elixir
defmodule Pleroma.Activity.Pruner do
|
|
@moduledoc """
|
|
Prunes activities from the database.
|
|
"""
|
|
@cutoff 30
|
|
|
|
alias Pleroma.Activity
|
|
alias Pleroma.Repo
|
|
import Ecto.Query
|
|
|
|
def prune_deletes do
|
|
before_time = cutoff()
|
|
|
|
from(a in Activity,
|
|
where: fragment("?->>'type' = ?", a.data, "Delete") and a.inserted_at < ^before_time
|
|
)
|
|
|> Repo.delete_all(timeout: :infinity)
|
|
end
|
|
|
|
def prune_undos do
|
|
before_time = cutoff()
|
|
|
|
from(a in Activity,
|
|
where: fragment("?->>'type' = ?", a.data, "Undo") and a.inserted_at < ^before_time
|
|
)
|
|
|> Repo.delete_all(timeout: :infinity)
|
|
end
|
|
|
|
def prune_removes do
|
|
before_time = cutoff()
|
|
|
|
from(a in Activity,
|
|
where: fragment("?->>'type' = ?", a.data, "Remove") and a.inserted_at < ^before_time
|
|
)
|
|
|> Repo.delete_all(timeout: :infinity)
|
|
end
|
|
|
|
def prune_stale_follow_requests do
|
|
before_time = cutoff()
|
|
|
|
from(a in Activity,
|
|
where:
|
|
fragment("?->>'type' = ?", a.data, "Follow") and a.inserted_at < ^before_time and
|
|
fragment("?->>'state' = ?", a.data, "reject")
|
|
)
|
|
|> Repo.delete_all(timeout: :infinity)
|
|
end
|
|
|
|
defp cutoff do
|
|
DateTime.utc_now() |> Timex.shift(days: -@cutoff)
|
|
end
|
|
end
|