/// <summary>
        /// Gets the list of folder media entities.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// The list of folder media entities
        /// </returns>
        /// <exception cref="CmsApiException"></exception>
        public DataListResponse<Media> GetFolderMedias(GetFolderMediasRequest request)
        {
            try
            {
                var query = Repository
                    .AsQueryable<Media>()
                    .Where(f => f.Type == request.MediaType)
                    .ApplyFilters(request);

                if (request.FolderId.HasValue)
                {
                    query = query.Where(f => f.Folder != null && f.Folder.Id == request.FolderId.Value);
                }
                else
                {
                    query = query.Where(f => f.Folder == null);
                }

                var totalCount = query.ToRowCountFutureValue(request);
                query = query.AddOrderAndPaging(request);

                return query.ToDataListResponse(totalCount);
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to get folder medias list for media type={0} and folderId={1}.",
                    request.MediaType,
                    request.FolderId.HasValue ? request.FolderId.Value.ToString() : "null");
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
        /// <summary>
        /// Gets the list of folder media entities.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// The list of folder media entities
        /// </returns>
        /// <exception cref="CmsApiException"></exception>
        public DataListResponse <Media> GetFolderMedias(GetFolderMediasRequest request)
        {
            try
            {
                var query = Repository
                            .AsQueryable <Media>()
                            .Where(f => f.Type == request.MediaType)
                            .ApplyFilters(request);

                if (request.FolderId.HasValue)
                {
                    query = query.Where(f => f.Folder != null && f.Folder.Id == request.FolderId.Value);
                }
                else
                {
                    query = query.Where(f => f.Folder == null);
                }

                var totalCount = query.ToRowCountFutureValue(request);
                query = query.AddOrderAndPaging(request);

                return(query.ToDataListResponse(totalCount));
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to get folder medias list for media type={0} and folderId={1}.",
                                            request.MediaType,
                                            request.FolderId.HasValue ? request.FolderId.Value.ToString() : "null");
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
 public void Should_Return_Root_Files_Folder_Medias_List_Successfully()
 {
     RunActionInTransaction(session =>
     {
         CreateFakeMedias(session, false);
         var repository = CreateRepository(session);
         using (var service = new MediaManagerApiContext(Container.BeginLifetimeScope(), repository))
         {
             // Root files folder has at least 1 folder and 1 file
             var request      = new GetFolderMediasRequest(MediaType.File, itemsCount: 2);
             var folderMedias = service.GetFolderMedias(request);
             Assert.IsNotNull(folderMedias);
             Assert.AreEqual(folderMedias.Items.Count, 2);
         }
     });
 }
        public void Should_Return_Root_Image_Folder_Medias_List_Successfully()
        {
            RunActionInTransaction(session =>
            {
                CreateFakeMedias(session, false);
                var repository = CreateRepository(session);
                using (var service = new MediaManagerApiContext(Container.BeginLifetimeScope(), repository))
                {
                    // Root images folder has at least 2 folders and at least 3 files
                    var request = new GetFolderMediasRequest(MediaType.Image, itemsCount: 5);

                    var folderMedias = service.GetFolderMedias(request);
                    Assert.IsNotNull(folderMedias);
                    Assert.AreEqual(folderMedias.Items.Count, 5);
                }
            });
        }