public RoundDto CalculateRoundScore(RoundDto round)
        {
            var previousRoundsScoresSum = GetPreviousRoundScoresSum(round);

            var currentRoundRollsSum = GetCurrentRoundScore(round);

            var firstRollScore = round.Rolls.FirstOrDefault().Score;

            RoundTypeDto roundTypeDto = null;

            var isStrike = firstRollScore == PinsCount;

            if (isStrike)
            {
                round.Score  = previousRoundsScoresSum + currentRoundRollsSum + 10;
                roundTypeDto = _roundRepository.GetRoundTypeByName("Strike");
            }

            var isOpen = currentRoundRollsSum < PinsCount;

            if (isOpen)
            {
                round.Score  = previousRoundsScoresSum + currentRoundRollsSum;
                roundTypeDto = _roundRepository.GetRoundTypeByName("Open");
            }

            var isSpare = (currentRoundRollsSum == PinsCount && firstRollScore != PinsCount);

            if (isSpare)
            {
                round.Score  = previousRoundsScoresSum + firstRollScore + 10;
                roundTypeDto = _roundRepository.GetRoundTypeByName("Spare");
            }

            if (!isSpare && !isOpen & !isStrike)
            {
                throw new ArgumentOutOfRangeException();
            }

            round.RoundTypeId = roundTypeDto?.Id;

            return(round);
        }