mirror of
https://github.com/ClaperCo/Claper.git
synced 2026-02-24 12:09:59 +01:00
## ⚠️ 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)
75 lines
2.0 KiB
Elixir
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
|