defmodule Frenzy.User do use Ecto.Schema import Ecto.Changeset schema "users" do field :username, :string field :password, :string, virtual: true field :password_hash, :string has_many :groups, Frenzy.Group, on_delete: :delete_all timestamps() end @doc false def changeset(user, attrs) do user |> cast(attrs, [:username, :password_hash]) |> validate_required([:username, :password_hash]) end def registration_changeset(user, attrs) do user |> cast(attrs, [:username, :password]) |> validate_length(:password, min: 8) |> put_password_hash() end defp put_password_hash( %Ecto.Changeset{valid?: true, changes: %{password: password}} = changeset ) do change(changeset, Bcrypt.add_hash(password)) end defp put_password_hash(changeset), do: changeset end