Exemplo n.º 1
0
        private async Task <IPagedCollection <TrackDetail> > GetTrackList(GetTrackListQuery request)
        {
            var filter = _filterBuilder
                         .WhereAlbumLike(request.Album)
                         .WhereArtistLike(request.Artist)
                         .WhereComposerLike(request.Composer)
                         .WhereGenreLike(request.Genre)
                         .WhereMediaTypeLike(request.MediaType)
                         .WhereNameLike(request.Name)
                         .WherePrice(request.PriceFrom, request.PriceTo)
                         .WherePlaylistIdEquals(request.PlaylistId)
                         .Filter;

            var tracksFromDb = await _context
                               .Tracks
                               .TagWithQueryName(nameof(GetTrackList))
                               .AsNoTracking()
                               .Where(filter)
                               .Include(track => track.Genre)
                               .Include(track => track.Album !.Artist)
                               .Include(track => track.MediaType)
                               .OrderBy(request.Order, _orderBuilder)
                               .ToPagedCollectionAsync(request.PageNumber, request.PageSize);

            var tracks = _mapper.Map <IReadOnlyList <TrackDetail> >(tracksFromDb);

            return(new PagedCollection <TrackDetail>(
                       tracks,
                       tracksFromDb.ItemCount,
                       tracksFromDb.CurrentPageNumber,
                       tracksFromDb.PageSize));
        }
Exemplo n.º 2
0
        public Task <IPagedCollection <TrackDetail> > Handle(GetTrackListQuery request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(GetTrackList(request));
        }