Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

44 řádky
1.1KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2021 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: [fields: [:args]]
  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. @spec get_expiration(pos_integer()) :: Job.t() | nil
  27. def get_expiration(id) do
  28. from(j in Job,
  29. where: j.state == "scheduled",
  30. where: j.queue == "filter_expiration",
  31. where: fragment("?->'filter_id' = ?", j.args, ^id)
  32. )
  33. |> Repo.one()
  34. end
  35. end