Skip to content

Instantly share code, notes, and snippets.

@joeljuca
Created June 13, 2024 18:25
Show Gist options
  • Select an option

  • Save joeljuca/7c21bd9d043e627bac0b8f80b107dfea to your computer and use it in GitHub Desktop.

Select an option

Save joeljuca/7c21bd9d043e627bac0b8f80b107dfea to your computer and use it in GitHub Desktop.

Revisions

  1. joeljuca created this gist Jun 13, 2024.
    29 changes: 29 additions & 0 deletions accounts.ex
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    defmodule MyApp.Accounts do
    import Ecto.Changeset

    def sign_up(%{} = params) do
    params_schema = %{
    name: :string,
    email: :string,
    phone: :string,
    password: :string
    }

    changeset =
    {%{}, params_schema}
    |> cast(params, Map.keys(params_schema))
    |> validate_required([:name, :email, :password])
    |> validate_length(:password, min: 24)
    |> validate_confirmation(:password, required: true)

    # Aqui valido com um `apply_action/2` nomeado, e recebo uma
    # tupla se a validação der bom 👇
    with {:ok, user_params} <- apply_action(changeset, :sign_up),

    # Com os argumentos externos já validados e filtrados,
    # chamo a(s) função(ões) adequadas com certa segurança
    {:ok, user} <- create_user(user_params) do
    {:ok, user}
    end
    end
    end