Files
Claper/lib/claper/workers/mailers.ex
Alex Lion 5bd4793b6e Version 2.4.0
## ⚠️ Breaking changes

- S3 variables are now named: S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_REGION and S3_BUCKET
- Users now have roles. Refer to the `roles` table and assign a role to a user with the `role_id` column in the `users` table.

## Features

- Add Admin Panel to manage users and presentations
- Add user roles: user, admin
- Add `LANGUAGES` setting to configure available languages in the app
- Add hideable presenter attendee count (#183 #155)
- Add Hungarian translation (#161)
- Add Latvian translation (#163)
- Add custom S3 endpoint with `S3_SCHEME`, `S3_HOST`, `S3_PORT` and `S3_PUBLIC_URL`

## Fixes and improvements

- Upgrade JS dependencies
- Upgrade Elixir dependencies, including Phoenix Live View to 1.0.17
- Upgrade to Tailwind 4+
- Refactor view templates to use {} instead of <%= %>
- Fix event name validation to be required
- Docker image is now using Ubuntu instead of Alpine for better dependencies support
- Fix scrollbar not showing in event manager when no presentation file (#164) (@aryel780)
- Fix settings scroll for small screen (#168)
- Fix duplicate key quiz when duplicate (#182)
- Fix email change confirmation (#172)
- Fix italian translation (#179)
- Fix random poll choices (#184)
2025-12-26 14:46:16 +01: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