public async Task <ActionResult <(ErrorCode code, string message)> > Withdraw(string transactionid, [IsPositive] decimal amount) { if (ModelState.IsValid) { var casResult = _casinoManager.DecreaseBalance(amount, transactionid); if (casResult != ErrorCode.Success & _casinoManager.CheckTransaction(transactionid) != ErrorCode.Success) { return(Ok(new { Code = casResult, Message = Resources.DecreaseBalanceResources.ResourceManager.GetString(casResult.ToString()) ?? string.Empty })); } var balResult = _gameManager.IncreaseBalance(amount, transactionid); if (balResult != ErrorCode.Success & _gameManager.CheckTransaction(transactionid) != ErrorCode.Success) { var rollbackRes = await RollbackTransaction(transactionid, BalanceFactoryType.Casino); if (!rollbackRes.success) { return(Ok(new { Code = rollbackRes.error, Message = Resources.RollbackResources.ResourceManager.GetString(rollbackRes.error.ToString()) ?? string.Empty })); } return(Ok(new { Code = rollbackRes.error, Message = Resources.Resources.CasinoRolledBackWithDrawFailed })); } return(Ok(new { Code = ErrorCode.Success, Message = Resources.Resources.WithdrawedSuccessfully })); } return(BadRequest()); }
public ErrorCode ChangeBalance(string transactionid, decimal amount) { if (_from.GetBalance() < amount) { return(ErrorCode.NotEnoughtBalance); } var fromTransactionResult = _from.DecreaseBalance(amount, transactionid); if (fromTransactionResult != ErrorCode.Success) { return(fromTransactionResult); } var toTransactionResult = _to.IncreaseBalance(amount, transactionid); if (toTransactionResult != ErrorCode.Success) { _from.Rollback(transactionid); } return(toTransactionResult); }