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