Пример #1
0
        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());
        }
Пример #2
0
        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);
        }