public async Task <IHttpActionResult> Bet([FromBody] RequestBetGameView betViewModel)
        {
            try
            {
                var responseBetGameViewModel = new ResponseBetGameView();
                responseBetGameViewModel = await _gameService.PlaceBet(betViewModel);

                return(Ok(responseBetGameViewModel));
            }
            catch (Exception exception)
            {
                _logger.Error(exception.Message);
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exception.Message));
            }
        }
Example #2
0
        public async Task <ResponseBetGameView> PlaceBet(RequestBetGameView requestBetGameView)
        {
            var         responseBetGameView = new ResponseBetGameView();
            var         gameViewItem        = new GameViewItem();
            long        humanId;
            int         humanBetValue;
            List <long> deck = await GetDeckInGame(requestBetGameView.GameId);

            List <long> playersId = await _playerInGameRepository.GetAllPlayersIdByGameId(requestBetGameView.GameId);

            if (requestBetGameView.BetValue <= 0)
            {
                throw new Exception(UserMessages.NoBetValue);
            }

            humanId = await _playerInGameRepository.GetHumanIdByGameId(requestBetGameView.GameId);

            await _cardInHandRepository.RemoveAllCardsByGameId(requestBetGameView.GameId);

            humanBetValue = await _playerInGameRepository.GetBetByPlayerId(humanId, requestBetGameView.GameId);

            if (humanBetValue != 0)
            {
                throw new Exception(UserMessages.AlreadyBet);
            }

            await _playerInGameRepository.UpdateBet(new List <long> {
                humanId
            }, requestBetGameView.GameId, requestBetGameView.BetValue);

            _logger.Log(LogHelper.GetEvent(humanId, requestBetGameView.GameId, UserMessages.PlayerPlaceBet(requestBetGameView.BetValue)));
            await UpdateBotsBetValue(requestBetGameView.GameId);

            foreach (var playerId in playersId)
            {
                deck = await AddCardToPlayerHand(playerId, deck, requestBetGameView.GameId);

                deck = await AddCardToPlayerHand(playerId, deck, requestBetGameView.GameId);
            }

            responseBetGameView = await GetResponseBetGameView(requestBetGameView.GameId);

            return(responseBetGameView);
        }