def lock_and_transact(user, type, apply_function, update_function) do
Mutex.under(SubscribeMutex, user.uuid, fn ->
response =
case create_transaction(user, type) do
{:ok, _} ->
{:ok, response} = apply_function.()
response
{:error, _} ->
user = update_function(user)
{:error, :unfinished_transaction, handle_error!(type, user)}
end
delete_transaction!(user, type)
response
end)
end
def lock_and_transact(user, type, apply_function, update_function) do
Mutex.under(SubscribeMutex, user.uuid, fn ->
response =
case create_transaction(user, type) do
{:ok, _} ->
{:ok, response} = apply_function.()
response
{:error, _} ->
user = update_function(user)
{:error, :unfinished_transaction, handle_error!(type, user)}
end
delete_transaction!(user, type)
response
end)
end