1 defmodule Pleroma.DigestEmailWorker do
8 Logger.warn("Running digester")
9 config = Application.get_env(:pleroma, :email_notifications)[:digest]
10 negative_interval = -Map.fetch!(config, :interval)
11 inactivity_threshold = Map.fetch!(config, :inactivity_threshold)
12 inactive_users_query = Pleroma.User.list_inactive_users_query(inactivity_threshold)
14 now = NaiveDateTime.truncate(NaiveDateTime.utc_now(), :second)
16 from(u in inactive_users_query,
17 where: fragment("? #> '{\"email_notifications\",\"digest\"}' @> 'true'", u.info),
18 where: u.last_digest_emailed_at < datetime_add(^now, ^negative_interval, "day"),
26 Logger.warn("Running for #{length(v)} users")
32 defp run([user | users]) do
33 with %Swoosh.Email{} = email <- Pleroma.Emails.UserEmail.digest_email(user) do
34 Logger.warn("Sending to #{user.nickname}")
35 Pleroma.Emails.Mailer.deliver_async(email)
38 Logger.warn("Skipping #{user.nickname}")
41 Pleroma.User.touch_last_digest_emailed_at(user)