public GetPlaylistListQueryHandler(ICatalogRepository catalogRepository, IPlaylistFilter playlistFilter, IMapper mapper, ILogger <GetPlaylistListQueryHandler> logger)
 {
     _catalogRepository = catalogRepository ?? throw new ArgumentNullException(nameof(catalogRepository));
     _playlistFilter    = playlistFilter ?? throw new ArgumentNullException(nameof(playlistFilter));
     _mapper            = mapper ?? throw new ArgumentNullException(nameof(mapper));
     _logger            = logger ?? throw new ArgumentNullException(nameof(logger));
 }
示例#2
0
        public async Task <IPagedCollection <Playlist> > GetPlaylists(IPlaylistFilter filter, int pageNumber, int pageSize, CancellationToken cancellationToken)
        {
            var linqPlaylistFilter = filter as LinqPlaylistFilter;

            if (linqPlaylistFilter is null)
            {
                throw new ArgumentException("Sql catalog repository expects a linq playlist filter");
            }

            return(await _catalogDbContext
                   .Playlists
                   .TagWithQueryName(nameof(GetPlaylists))
                   .Where(linqPlaylistFilter.Filter)
                   .Include(e => e.PlaylistTracks)
                   .ToPagedCollectionAsync(pageNumber, pageSize, cancellationToken));
        }
        public async Task <IPagedCollection <PlaylistDetail> > Handle(GetPlaylistListQuery request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            _logger.LogInformation("Handle {QueryType} for playlists like {PlaylistName} with page number {PageNumber} and page size {PageSize}", nameof(GetPlaylistListQuery), request.Name, request.PageNumber, request.PageSize);
            IPlaylistFilter filter = _playlistFilter
                                     .WhereTrackIdEquals(request.TrackId)
                                     .WhereNameLike(request.Name);

            IPagedCollection <Playlist> playlistsDomain = await _catalogRepository.GetPlaylists(filter, request.PageNumber, request.PageSize, cancellationToken);

            var playlists = _mapper.Map <IReadOnlyList <PlaylistDetail> >(playlistsDomain);

            return(new PagedCollection <PlaylistDetail>(playlists, playlistsDomain.ItemCount, playlistsDomain.CurrentPageNumber, playlistsDomain.PageSize));
        }