yes sure, Thanks
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :lastname, :username, :email, :password_hash, :password, :sex, :role, :type])
|> validate_required([:name, :lastname, :username, :email, :sex, :role, :type], message: "فیلد مذکور نمی تواند خالی باشد.")
|> validate_inclusion(:sex, ["Man", "Female", "Other"])
|> validate_inclusion(:role, ["user", "admin"])
|> validate_inclusion(:type, ["normal", "facebook"])
|> validate_length(:name, min: 3, max: 20, message: "نام شما باید بین ۳ الی ۲۰ کاراکتر باشد.")
|> validate_length(:lastname, min: 3, max: 20, message: "نام خانوادگی شما باید بین ۳ الی ۲۰ کارکتر باشد.")
|> validate_length(:password, min: 7, max: 200, message: "پسورد شما باید حداقل ۷ کاراکتر باشد و حداکثر ۲۰۰ لطفا پسورد مناسبی انتخاب کنید.")
|> validate_length(:username, min: 3, max: 20, message: "نام کاربری شما باید بین ۳ الی ۲۰ کارکتر باشد.")
|> validate_length(:email, min: 8, max: 50, message: "تعداد کارکتر های ایمیل باید بین ۸ تا ۵۰ عدد باشد.")
|> unique_constraint(:username, name: :index_of_users_username, message: "نام کاربری وارد شده از قبل وجود دارد.")
|> unique_constraint(:email, name: :index_of_users_email, message: "ایمیل وارد شده از قبل وجود دارد.")
|> hash_password
end
defp hash_password(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: password}} ->
put_change(changeset, :password_hash, Bcrypt.hash_pwd_salt(password))
_ -> changeset
end
end