private async Task <BetCommandResponseTransaction> SettleBet(BetCommandTransactionRequest transaction, Func <GameActionData, GameActionContext, Task <Guid> > settleMethod, string batchId = null)
        {
            var  isDuplicate = 0;
            Guid gameActionId;

            try
            {
                var actionData = new GameActionData
                {
                    RoundId = transaction.RoundId,
                    ExternalTransactionId  = transaction.Id,
                    TransactionReferenceId = transaction.ReferenceId,
                    Amount         = transaction.Amount,
                    CurrencyCode   = transaction.CurrencyCode,
                    Description    = transaction.Description,
                    BatchId        = batchId,
                    ExternalGameId = transaction.GameId
                };
                gameActionId = await settleMethod(actionData, Context);
            }
            catch (DuplicateGameActionException ex)
            {
                gameActionId = ex.GameActionId;
                isDuplicate  = 1;
            }

            return(new BetCommandResponseTransaction
            {
                GameActionId = gameActionId,
                Id = transaction.Id,
                IsDuplicate = isDuplicate
            });
        }
        private async Task <BetCommandResponseTransaction> PlaceBet(Guid playerId, BetCommandTransactionRequest transaction)
        {
            var  isDuplicate = 0;
            Guid gameActionId;

            ValidateAccountFrozenStatus(playerId);

            try
            {
                gameActionId = await _gameCommands.PlaceBetAsync(
                    new GameActionData
                {
                    RoundId               = transaction.RoundId,
                    ExternalGameId        = transaction.GameId,
                    ExternalTransactionId = transaction.Id,
                    Amount       = transaction.Amount,
                    CurrencyCode = transaction.CurrencyCode,
                    Description  = transaction.Description,
                }, Context, playerId);
            }
            catch (DuplicateGameActionException ex)
            {
                gameActionId = ex.GameActionId;
                isDuplicate  = 1;
            }

            return(new BetCommandResponseTransaction
            {
                GameActionId = gameActionId,
                Id = transaction.Id,
                IsDuplicate = isDuplicate
            });
        }