Files
Claper/lib/claper/workers/mailers.ex
Raúl R Pearson 03feb9a901 Fix email change confirmation (#172)
* Update translation files

I run `mix gettext.extract` and `mix gettext.merge priv/gettext`
as it seems that the files were somewhat outdated.

* Fix email change confirmation

Send the confirmation email to the new address

* Tweak email change confirmation email

* Run ./dev.sh format
2025-09-10 08:16:55 +02:00

75 lines
2.0 KiB
Elixir

defmodule Claper.Workers.Mailers do
use Oban.Worker, queue: :mailers
alias Claper.Mailer
alias ClaperWeb.Notifiers.{UserNotifier, LeaderNotifier}
@impl Oban.Worker
def perform(%Oban.Job{args: %{"type" => type, "user_id" => user_id, "url" => url}})
when type in ["confirm", "reset"] do
user = Claper.Accounts.get_user!(user_id)
email =
case type do
"confirm" -> UserNotifier.confirm(user, url)
"reset" -> UserNotifier.reset(user, url)
end
Mailer.deliver(email)
end
def perform(%Oban.Job{
args: %{"type" => "update_email", "new_email" => new_email, "url" => url}
}) do
email = UserNotifier.update_email(new_email, url)
Mailer.deliver(email)
end
def perform(%Oban.Job{args: %{"type" => "magic", "email" => email, "url" => url}}) do
email = UserNotifier.magic(email, url)
Mailer.deliver(email)
end
def perform(%Oban.Job{args: %{"type" => "welcome", "email" => email}}) do
email = UserNotifier.welcome(email)
Mailer.deliver(email)
end
def perform(%Oban.Job{
args: %{
"type" => "event_invitation",
"event_name" => event_name,
"email" => email,
"url" => url
}
}) do
email = LeaderNotifier.event_invitation(event_name, email, url)
Mailer.deliver(email)
end
# Helper functions to create jobs
def new_confirmation(user_id, url) do
new(%{type: "confirm", user_id: user_id, url: url})
end
def new_reset_password(user_id, url) do
new(%{type: "reset", user_id: user_id, url: url})
end
def new_update_email(new_email, url) do
new(%{type: "update_email", new_email: new_email, url: url})
end
def new_magic_link(email, url) do
new(%{type: "magic", email: email, url: url})
end
def new_welcome(email) do
new(%{type: "welcome", email: email})
end
def event_invitation(event_name, email, url) do
new(%{type: "event_invitation", event_name: event_name, email: email, url: url})
end
end