예제 #1
0
        public async Task <GetWinnersGameView> GetWinners(int roundId)
        {
            Round round = await _roundRepository.GetRoundIncludeHandsAndPlayers(roundId);

            if (round == null)
            {
                var stringBuilder = new StringBuilder();

                stringBuilder.AppendLine(string.Format("RoundId: {0}", roundId));
                stringBuilder.AppendLine(string.Format("Message: {0}", SolutionConstants.BUSINESS_LOGIC_GET_ITEM_EXCEPTION_MESSAGE));

                string message = stringBuilder.ToString();

                throw new BusinessLogicGetItemException(message);
            }

            List <Hand> allHands = round.Hands.ToList();

            Hand deallerHand = allHands.FirstOrDefault(item => item.Player.PlayerRole == PlayerRole.Dealler);

            List <Hand> playersHands = allHands.Where(item => item.Player.PlayerRole != PlayerRole.Dealler).ToList();

            bool checkGameIsFinished = await CheckGameIsFinished(round.GameId);

            foreach (Hand hand in playersHands)
            {
                SetSituation(hand, deallerHand);
            }

            await _handRepository.UpdateMultiple(playersHands);

            await CalculateCashFlow(deallerHand, playersHands);

            Deck infinityDeck = await _deckProvider.GetAllDeckFromCache(round.GameId);

            DeckExtension.AddUsedCardsToHangUp(infinityDeck);

            _deckProvider.SetDeckInMemoryCashe(round.GameId, infinityDeck);

            Hand playerHand = playersHands.FirstOrDefault(item => item.Player.PlayerRole == PlayerRole.Player);

            var responseView = new GetWinnersGameView();

            if (checkGameIsFinished)
            {
                List <GetWinnersGameViewItem> winnersViewItems = await DevideRewards(round.GameId);

                responseView.WinnersOfGame = winnersViewItems;
            }

            SetGetWinnersGameView(playerHand, deallerHand, responseView);

            return(responseView);
        }