public async Task <Account> CreateAsync(CreateAccount create, Action <CreateAccountOptions>?setOpts = null) { var balance = AccountBalance.Zero(create.Currency); var acc = new Account(create.Id, balance, true); try { await _repo.CreateAsync(acc); return(acc); } catch (AccountUniqException) { var options = new CreateAccountOptions(); setOpts?.Invoke(options); if (!options.IngoreOnDuplicate) { var info = new Dictionary <string, string>() { ["Id"] = create.Id.ToString() }; throw new WPayException(AccountErrors.AlreadyExist, info); } return(acc); } }