logo

pleroma

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

new_users_digest_worker.ex (1801B)


  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.Cron.NewUsersDigestWorker do
  5. alias Pleroma.Activity
  6. alias Pleroma.Repo
  7. alias Pleroma.User
  8. import Ecto.Query
  9. use Pleroma.Workers.WorkerHelper, queue: "mailer"
  10. @impl Oban.Worker
  11. def perform(_job) do
  12. if Pleroma.Config.get([Pleroma.Emails.NewUsersDigestEmail, :enabled]) do
  13. today = NaiveDateTime.utc_now() |> Timex.beginning_of_day()
  14. a_day_ago =
  15. today
  16. |> Timex.shift(days: -1)
  17. |> Timex.beginning_of_day()
  18. users_and_statuses =
  19. %{
  20. local: true,
  21. order_by: :inserted_at
  22. }
  23. |> User.Query.build()
  24. |> where([u], u.inserted_at >= ^a_day_ago and u.inserted_at < ^today)
  25. |> Repo.all()
  26. |> Enum.map(fn user ->
  27. latest_status =
  28. Activity
  29. |> Activity.Queries.by_actor(user.ap_id)
  30. |> Activity.Queries.by_type("Create")
  31. |> Activity.with_preloaded_object()
  32. |> order_by(desc: :inserted_at)
  33. |> limit(1)
  34. |> Repo.one()
  35. total_statuses =
  36. Activity
  37. |> Activity.Queries.by_actor(user.ap_id)
  38. |> Activity.Queries.by_type("Create")
  39. |> Repo.aggregate(:count, :id)
  40. {user, total_statuses, latest_status}
  41. end)
  42. if users_and_statuses != [] do
  43. %{is_admin: true}
  44. |> User.Query.build()
  45. |> where([u], not is_nil(u.email))
  46. |> Repo.all()
  47. |> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses))
  48. |> Enum.each(&Pleroma.Emails.Mailer.deliver/1)
  49. end
  50. end
  51. :ok
  52. end
  53. end