aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/workers
diff options
context:
space:
mode:
authorEgor Kislitsyn <egor@kislitsyn.com>2020-01-22 20:31:42 +0400
committerEgor Kislitsyn <egor@kislitsyn.com>2020-01-22 20:31:42 +0400
commitdf0b8f1d0802a2536bf436ff8157918929a183cc (patch)
tree48b0afb34aec2d8b8dc0079edf862c8fe70d077e /lib/pleroma/workers
parent52a0bf62f51d689cdc6f108cbefcb244a4a3737f (diff)
downloadpleroma-df0b8f1d0802a2536bf436ff8157918929a183cc.tar.gz
Add new users digest email
Diffstat (limited to 'lib/pleroma/workers')
-rw-r--r--lib/pleroma/workers/new_users_digest_worker.ex56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/pleroma/workers/new_users_digest_worker.ex b/lib/pleroma/workers/new_users_digest_worker.ex
new file mode 100644
index 000000000..24cc6bdf3
--- /dev/null
+++ b/lib/pleroma/workers/new_users_digest_worker.ex
@@ -0,0 +1,56 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.NewUsersDigestWorker do
+ alias Pleroma.User
+ alias Pleroma.Repo
+ alias Pleroma.Activity
+
+ import Ecto.Query
+
+ use Pleroma.Workers.WorkerHelper, queue: "new_users_digest"
+
+ @impl Oban.Worker
+ def perform(_args, _job) do
+ today = NaiveDateTime.utc_now() |> Timex.beginning_of_day()
+
+ a_day_ago =
+ today
+ |> Timex.shift(days: -1)
+ |> Timex.beginning_of_day()
+
+ users_and_statuses =
+ %{
+ local: true,
+ order_by: :inserted_at
+ }
+ |> User.Query.build()
+ |> where([u], u.inserted_at >= ^a_day_ago and u.inserted_at < ^today)
+ |> Repo.all()
+ |> Enum.map(fn user ->
+ latest_status =
+ Activity
+ |> Activity.Queries.by_actor(user.ap_id)
+ |> Activity.Queries.by_type("Create")
+ |> Activity.with_preloaded_object()
+ |> order_by(desc: :inserted_at)
+ |> limit(1)
+ |> Repo.one()
+
+ total_statuses =
+ Activity
+ |> Activity.Queries.by_actor(user.ap_id)
+ |> Activity.Queries.by_type("Create")
+ |> Repo.aggregate(:count, :id)
+
+ {user, total_statuses, latest_status}
+ end)
+
+ %{is_admin: true}
+ |> User.Query.build()
+ |> Repo.all()
+ |> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses))
+ |> Enum.each(&Pleroma.Emails.Mailer.deliver/1)
+ end
+end