25 lines
1,007 B
Elixir
25 lines
1,007 B
Elixir
defmodule Mv.Membership.JoinRequest.Changes.ConfirmRequest do
|
|
@moduledoc """
|
|
Sets the join request to submitted (confirmation link clicked).
|
|
|
|
Used by the confirm action after the user clicks the confirmation link.
|
|
Only applies when the current status is `:pending_confirmation`, so that
|
|
direct calls to the confirm action are idempotent and never overwrite
|
|
:submitted, :approved, or :rejected. Token hash is kept so a second click
|
|
can still find the record and return success without changing it.
|
|
"""
|
|
use Ash.Resource.Change
|
|
|
|
@spec change(Ash.Changeset.t(), keyword(), Ash.Resource.Change.context()) :: Ash.Changeset.t()
|
|
def change(changeset, _opts, _context) do
|
|
current_status = Ash.Changeset.get_data(changeset, :status)
|
|
|
|
if current_status == :pending_confirmation do
|
|
changeset
|
|
|> Ash.Changeset.force_change_attribute(:status, :submitted)
|
|
|> Ash.Changeset.force_change_attribute(:submitted_at, DateTime.utc_now())
|
|
else
|
|
changeset
|
|
end
|
|
end
|
|
end
|