logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

purge_expired_filter.ex (1171B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Workers.PurgeExpiredFilter do
  5. @moduledoc """
  6. Worker which purges expired filters
  7. """
  8. use Oban.Worker, queue: :filter_expiration, max_attempts: 1, unique: [period: :infinity]
  9. import Ecto.Query
  10. alias Oban.Job
  11. alias Pleroma.Repo
  12. @spec enqueue(%{filter_id: integer(), expires_at: DateTime.t()}) ::
  13. {:ok, Job.t()} | {:error, Ecto.Changeset.t()}
  14. def enqueue(args) do
  15. {scheduled_at, args} = Map.pop(args, :expires_at)
  16. args
  17. |> new(scheduled_at: scheduled_at)
  18. |> Oban.insert()
  19. end
  20. @impl true
  21. def perform(%Job{args: %{"filter_id" => id}}) do
  22. Pleroma.Filter
  23. |> Repo.get(id)
  24. |> Repo.delete()
  25. end
  26. @impl Oban.Worker
  27. def timeout(_job), do: :timer.seconds(5)
  28. @spec get_expiration(pos_integer()) :: Job.t() | nil
  29. def get_expiration(id) do
  30. from(j in Job,
  31. where: j.state == "scheduled",
  32. where: j.queue == "filter_expiration",
  33. where: fragment("?->'filter_id' = ?", j.args, ^id)
  34. )
  35. |> Repo.one()
  36. end
  37. end