/// <summary>
        /// Возвращает страницу музыкальных релизов с заданным номером и размером,
        /// музыкальные релизы сортированы по дата релиза
        /// </summary>
        /// <param name="pageSize">Размер страницы</param>
        /// <param name="pageNumber">Номер страницы</param>
        /// <param name="genreId">Идентификатор жанра</param>
        /// <param name="userId">Идентификатор пользователя</param>
        /// <returns>Страница музыкальных релизов</returns>
        public MusicPageInfo GetPageInfoByDate(int pageSize, int pageNumber, int?genreId = null, string userId = null)
        {
            Expression <Func <DbMusic, bool> > filter = null;

            if (genreId != null)
            {
                filter = f => f.Genres.Select(g => g.Id).Contains(genreId.Value);
            }

            var pageInfo = new MusicPageInfo();

            pageInfo.TotalItemsCount = unitOfWork.MusicRepository.ItemsCount(filter);
            pageInfo.TotalPagesCount = (int)Math.Ceiling((double)pageInfo.TotalItemsCount / pageSize);
            pageInfo.PageItems       = Mapper.Map <IEnumerable <DbMusic>, IEnumerable <Music> >(
                unitOfWork.MusicRepository.GetPage(
                    pageSize,
                    pageNumber,
                    filter,
                    o => o.OrderByDescending(t => t.ReleaseDate),
                    $"{nameof(DbMusic.Musicians)},{nameof(DbMusic.Users)}"),
                opts => opts.AfterMap((src, dest) =>
            {
                foreach (var music in dest)
                {
                    music.IsUserSubscribed = src.First(x => x.Id == music.Id).Users.Any(x => x.Id == userId);
                }
            }));
            return(pageInfo);
        }
        /// <summary>
        /// Возвращает страницу музыкальных релизов с заданным номером и размером,
        /// музыкальные релизы сортированы по дата релиза
        /// </summary>
        /// <param name="pageSize">Размер страницы</param>
        /// <param name="pageNumber">Номер страницы</param>
        /// <param name="genreId">Идентификатор жанра</param>
        /// <returns>Страница музыкальных релизов</returns>
        public MusicPageInfo GetPageInfoByDate(int pageSize, int pageNumber, int?genreId = null)
        {
            Expression <Func <DbMusic, bool> > filter = null;

            if (genreId != null)
            {
                filter = f => f.Genres.Select(g => g.Id).Contains(genreId.Value);
            }

            var pageInfo = new MusicPageInfo();

            pageInfo.TotalItemsCount = _unitOfWork.MusicRepository.ItemsCount(filter);
            pageInfo.TotalPagesCount = (int)Math.Ceiling((double)pageInfo.TotalItemsCount / pageSize);
            pageInfo.PageItems       = Mapper.Map <IEnumerable <Music> >(_unitOfWork.MusicRepository.GetPage(
                                                                             pageSize,
                                                                             pageNumber,
                                                                             filter,
                                                                             o => o.OrderByDescending(t => t.ReleaseDate),
                                                                             $"{nameof(Music.Musicians)}"));
            return(pageInfo);
        }