public async Task <ActionResult> PutFolder([FromBody] PutFolderRequest request) { var folder = await _documentlibContext.Folders.FindAsync(request.Id); folder.Name = request.Name; _documentlibContext.Update(folder); await _documentlibContext.SaveChangesAsync(); var response = new FolderResponse { Id = folder.Id.ToString(), Name = folder.Name, Registers = folder.Registers?.Select(reg => reg.Id.ToString()).ToArray() ?? new string[0], DocumentCount = folder.Registers?.Sum(reg => reg.DocumentCount) ?? 0 }; return(Ok(response)); }
/// <summary> /// Replaces the folder or if it doesn't exist, creates it. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PutFolderResponse</c> with a folder id. /// </returns> public PutFolderResponse Put(PutFolderRequest request) { IEnumerable <MediaFolder> parentFolderFuture = null; if (request.Data.ParentFolderId.HasValue) { parentFolderFuture = repository.AsQueryable <MediaFolder>() .Where(c => c.Id == request.Data.ParentFolderId.Value && !c.IsDeleted) .ToFuture(); } var mediaFolder = repository.AsQueryable <MediaFolder>() .Fetch(media => media.Folder) .Distinct() .ToFuture() .FirstOrDefault(folder => folder.Id == request.Id); MediaFolder parentFolder = null; if (parentFolderFuture != null) { parentFolder = parentFolderFuture.First(); if (parentFolder.Type != (Module.MediaManager.Models.MediaType)(int) request.Data.Type) { throw new CmsApiValidationException("Parent folder type does not match to this folder type."); } } var createFolder = mediaFolder == null; if (createFolder) { mediaFolder = new MediaFolder { Id = request.Id.GetValueOrDefault(), ContentType = Module.MediaManager.Models.MediaContentType.Folder, Type = (Module.MediaManager.Models.MediaType)(int) request.Data.Type }; } else if (request.Data.Version > 0) { mediaFolder.Version = request.Data.Version; } unitOfWork.BeginTransaction(); mediaFolder.Title = request.Data.Title; mediaFolder.Folder = parentFolder; mediaFolder.PublishedOn = DateTime.Now; var archivedMedias = new List <Media>(); var unarchivedMedias = new List <Media>(); if (mediaFolder.IsArchived != request.Data.IsArchived) { if (request.Data.IsArchived) { archivedMedias.Add(mediaFolder); mediaService.ArchiveSubMedias(mediaFolder, archivedMedias); } else { unarchivedMedias.Add(mediaFolder); mediaService.UnarchiveSubMedias(mediaFolder, unarchivedMedias); } } mediaFolder.IsArchived = request.Data.IsArchived; repository.Save(mediaFolder); unitOfWork.Commit(); // Fire events. if (createFolder) { Events.MediaManagerEvents.Instance.OnMediaFolderCreated(mediaFolder); } else { Events.MediaManagerEvents.Instance.OnMediaFolderUpdated(mediaFolder); } foreach (var archivedMedia in archivedMedias.Distinct()) { Events.MediaManagerEvents.Instance.OnMediaArchived(archivedMedia); } foreach (var archivedMedia in unarchivedMedias.Distinct()) { Events.MediaManagerEvents.Instance.OnMediaUnarchived(archivedMedia); } return(new PutFolderResponse { Data = mediaFolder.Id }); }
/// <summary> /// Replaces the folder or if it doesn't exist, creates it. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PutFolderResponse</c> with a folder id. /// </returns> public PutFolderResponse Put(PutFolderRequest request) { IEnumerable<MediaFolder> parentFolderFuture = null; if (request.Data.ParentFolderId.HasValue) { parentFolderFuture = repository.AsQueryable<MediaFolder>() .Where(c => c.Id == request.Data.ParentFolderId.Value && !c.IsDeleted) .ToFuture(); } var mediaFolder = repository.AsQueryable<MediaFolder>() .Fetch(media => media.Folder) .Distinct() .ToFuture() .FirstOrDefault(folder => folder.Id == request.Id); MediaFolder parentFolder = null; if (parentFolderFuture != null) { parentFolder = parentFolderFuture.First(); if (parentFolder.Type != (Module.MediaManager.Models.MediaType)(int)request.Data.Type) { throw new CmsApiValidationException("Parent folder type does not match to this folder type."); } } var createFolder = mediaFolder == null; if (createFolder) { mediaFolder = new MediaFolder { Id = request.Id.GetValueOrDefault(), ContentType = Module.MediaManager.Models.MediaContentType.Folder, Type = (Module.MediaManager.Models.MediaType)(int)request.Data.Type }; } else if (request.Data.Version > 0) { mediaFolder.Version = request.Data.Version; } unitOfWork.BeginTransaction(); mediaFolder.Title = request.Data.Title; mediaFolder.Folder = parentFolder; mediaFolder.PublishedOn = DateTime.Now; var archivedMedias = new List<Media>(); var unarchivedMedias = new List<Media>(); if (mediaFolder.IsArchived != request.Data.IsArchived) { if (request.Data.IsArchived) { archivedMedias.Add(mediaFolder); mediaService.ArchiveSubMedias(mediaFolder, archivedMedias); } else { unarchivedMedias.Add(mediaFolder); mediaService.UnarchiveSubMedias(mediaFolder, unarchivedMedias); } } mediaFolder.IsArchived = request.Data.IsArchived; repository.Save(mediaFolder); unitOfWork.Commit(); // Fire events. if (createFolder) { Events.MediaManagerEvents.Instance.OnMediaFolderCreated(mediaFolder); } else { Events.MediaManagerEvents.Instance.OnMediaFolderUpdated(mediaFolder); } foreach (var archivedMedia in archivedMedias.Distinct()) { Events.MediaManagerEvents.Instance.OnMediaArchived(archivedMedia); } foreach (var archivedMedia in unarchivedMedias.Distinct()) { Events.MediaManagerEvents.Instance.OnMediaUnarchived(archivedMedia); } return new PutFolderResponse { Data = mediaFolder.Id }; }