Привет, я получаю значение, и это значение не может быть отрицательным, только положительным, я хотел бы вернуть пользовательскую ошибку, если оно отрицательное, и перейти к каналу, если оно отрицательное.
у меня это на данный момент:
def call(%{"id" => id, "value" => value}, operation) do
Multi.new()
|> Multi.run(:account, fn repo, _changes -> get_account(repo, id) end)
|> Multi.run(:update_balance, fn repo, %{account: account} ->
update_balance(repo, account, value, operation)
end)
end
defp update_balance(repo, account, value, operation) do
account
|> operation(value, operation)
|> update_account(repo, account)
end
defp operation(%Account{balance: balance}, value, operation) do
value
|> Decimal.cast()
|> handle_cast(balance, operation)
end
defp handle_cast({:ok, value}, balance, :deposit), do: Decimal.add(balance, value)
defp handle_cast({:ok, value}, balance, :withdraw), do: Decimal.sub(balance, value)
defp handle_cast(:error, _balance, _operation), do: {:error, "Invalid operation!"}
"2" < 3
не подведет, а вернетfalse
. Я только что обновил ответ еще парой вариантов 26.02.2021handle_cast
, вам не нужно будет изменятьoperation
, так что это самое простое и наиболее правильное решение IMO. 26.02.2021Decimal
— это другой тип, и, как и строки, он всегда будет больше, чем просто целое число. 26.02.2021