defmodule DaProductApp.Accounts.User do use Ecto.Schema import Ecto.Changeset alias DaProductApp.Accounts.{Organization, Role} schema "users" do field :email, :string field :name, :string field :password, :string, virtual: true field :password_hash, :string field :is_active, :boolean, default: true belongs_to :organization, Organization belongs_to :role, Role timestamps() end @doc false def changeset(user, attrs) do user |> cast(attrs, [:email, :name, :password, :organization_id, :role_id, :is_active]) |> validate_required([:email, :name]) |> validate_format(:email, ~r/^[^\s]+@[^\s]+\.[^\s]+$/) |> unique_constraint(:email) |> put_password_hash() end defp put_password_hash(changeset) do case get_change(changeset, :password) do nil -> changeset pw -> hash = Bcrypt.hash_pwd_salt(pw) put_change(changeset, :password_hash, hash) end end end