public double CalculateSongRank(SongModel song, PlaybacksInfo playbacksInfo)
        {
            if (!song.LastPlaybackTime.HasValue)
            {
                return(MaxRank);
            }

            var factorForRating       = GetFactorForRating(song.GetRatingOrDefault());
            var factorForPlaybacksAge = GetFactorForPlaybackAge(playbacksInfo.GetPlaybacksPassed(song));

            return(factorForRating * factorForPlaybacksAge);
        }
        private bool IsTimeToListenHighlyRatedSong(SongModel song)
        {
            if (!maxTermsForRatings.TryGetValue(song.GetRatingOrDefault(), out var maxTerm))
            {
                return(false);
            }

            if (song.LastPlaybackTime == null)
            {
                return(true);
            }

            return(dateTimeFacade.Now - song.LastPlaybackTime.Value >= maxTerm);
        }