/// <summary> /// Finds media files. /// </summary> public async Task <MediaListVM> GetMediaAsync(MediaListRequestVM request) { const int PageSize = 20; request = NormalizeListRequest(request); var result = new MediaListVM { Request = request }; await FillAdditionalDataAsync(request, result); var query = _db.Media .Include(x => x.Tags) .Where(x => x.IsDeleted == false); if (!string.IsNullOrEmpty(request.SearchQuery)) { query = query.Where(x => x.Title.ToLower().Contains(request.SearchQuery.ToLower())); } if (request.EntityId != null) { query = query.Where(x => x.Tags.Any(y => y.ObjectId == request.EntityId)); } if (request.Types?.Length > 0) { query = query.Where(x => request.Types.Contains(x.Type)); } var totalCount = await query.CountAsync(); result.PageCount = (int)Math.Ceiling((double)totalCount / PageSize); result.Items = await query.OrderBy(request.OrderBy, request.OrderDescending ?? false) .ProjectTo <MediaThumbnailExtendedVM>(_mapper.ConfigurationProvider) .Skip(PageSize * request.Page) .Take(PageSize) .ToListAsync(); return(result); }
/// <summary> /// Loads extra data for the filter. /// </summary> private async Task FillAdditionalDataAsync(MediaListRequestVM request, MediaListVM data) { if (request.EntityId != null) { var title = await _db.Pages .Where(x => x.Id == request.EntityId) .Select(x => x.Title) .FirstOrDefaultAsync(); if (title != null) { data.EntityTitle = title; } else { request.EntityId = null; } } }