berrypod/lib/berrypod_web/controllers/email_settings_controller.ex
jamey c6636cab65
Some checks failed
deploy / deploy (push) Has been cancelled
improve email settings progressive enhancement and admin layout
- semantic HTML: step numbers inside h2, strong provider names, details
  for adapter configs, strong error messages, fieldset drawer toggle hidden
- inline field errors via flash for no-JS controller fallback
- single form POST button for test email (works with and without JS)
- admin sidebar: remove brand/view-shop, move user email to footer nav
- replace inline style with .admin-setup-step-spaced class
- clean up unused CSS (.admin-brand, .admin-sidebar-header, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 15:29:05 +00:00

49 lines
1.5 KiB
Elixir

defmodule BerrypodWeb.EmailSettingsController do
@moduledoc """
No-JS fallback for email settings form submission.
With JS enabled, the LiveView handles everything. Without JS,
the form POSTs here and we redirect back to the LiveView page.
"""
use BerrypodWeb, :controller
alias Berrypod.Mailer
def update(conn, %{"email" => params}) do
adapter_key = params["adapter"]
# Fields are namespaced: email[brevo][api_key] → params["brevo"]["api_key"]
adapter_params = params[adapter_key] || %{}
case Mailer.save_config(adapter_key, adapter_params, conn.assigns.current_scope.user.email) do
{:ok, _adapter_info} ->
conn
|> put_flash(:info, "Settings saved — send a test email to check it works")
|> redirect(to: ~p"/admin/settings/email")
{:error, field_errors} when is_map(field_errors) ->
conn
|> put_flash(:field_errors, field_errors)
|> put_flash(:error_adapter, adapter_key)
|> redirect(to: ~p"/admin/settings/email")
end
end
def test(conn, _params) do
user = conn.assigns.current_scope.user
case Mailer.send_test_email(user.email, Mailer.from_address()) do
{:ok, _} ->
Mailer.mark_email_verified()
conn
|> put_flash(:info, "Test email sent to #{user.email}")
|> redirect(to: ~p"/admin/settings/email")
{:error, reason} ->
conn
|> put_flash(:error, Mailer.friendly_error(reason))
|> redirect(to: ~p"/admin/settings/email")
end
end
end