akkoma/lib/pleroma/workers/cron/new_users_digest_worker.ex

62 lines
1.8 KiB
Elixir
Raw Normal View History

2020-01-22 16:31:42 +00:00
# Pleroma: A lightweight social networking server
2020-02-11 19:33:05 +00:00
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
2020-01-22 16:31:42 +00:00
# SPDX-License-Identifier: AGPL-3.0-only
2020-02-11 19:33:05 +00:00
defmodule Pleroma.Workers.Cron.NewUsersDigestWorker do
2020-01-22 16:31:42 +00:00
alias Pleroma.Activity
2020-01-22 16:59:58 +00:00
alias Pleroma.Repo
alias Pleroma.User
2020-01-22 16:31:42 +00:00
import Ecto.Query
use Pleroma.Workers.WorkerHelper, queue: "new_users_digest"
@impl Oban.Worker
def perform(_args, _job) do
2020-01-22 16:53:06 +00:00
if Pleroma.Config.get([Pleroma.Emails.NewUsersDigestEmail, :enabled]) 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)
2020-02-11 19:33:05 +00:00
if users_and_statuses != [] do
%{is_admin: true}
|> User.Query.build()
2020-02-27 13:27:49 +00:00
|> where([u], not is_nil(u.email))
2020-02-11 19:33:05 +00:00
|> Repo.all()
|> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses))
|> Enum.each(&Pleroma.Emails.Mailer.deliver/1)
end
2020-01-22 16:53:06 +00:00
end
2020-01-22 16:31:42 +00:00
end
end