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); }