// need for the breadcrumbs navigation private void AddParentFolderRecursively( IEnumerable <OutputFolderWithAccessServiceModel> folders, OutputFolderServiceModel folder) { if (folder.ParentId.HasValue) { folder.ParentFolder = this.MapToOutputFolderServiceModel( folders.FirstOrDefault(x => x.FolderId == folder.ParentId.Value)); this.AddParentFolderRecursively(folders, folder.ParentFolder); } }
private void CalculateTotalFileCountAndFolderCountForTree(OutputFolderServiceModel folder) { if (folder.SubFolders.Any()) { foreach (var subFolder in folder.SubFolders) { CalculateTotalFileCountAndFolderCountForTree(subFolder); } folder.FileCount += folder.SubFolders.Sum(f => f.FileCount); folder.FolderCount += folder.SubFolders.Sum(f => f.FolderCount); } }
private async Task DeleteFilesAsync(int catalogId, int employeeId, OutputFolderServiceModel parentFolder) { if (parentFolder is null) { return; } await this.DeleteFilesForFolderAsync(parentFolder.FolderId); foreach (var subFolder in parentFolder.SubFolders) { await this.DeleteFilesForFolderAsync(subFolder.FolderId); await this.DeleteFilesAsync(catalogId, employeeId, subFolder); } }
private OutputFolderServiceModel FindFolderWithId(OutputFolderServiceModel folder, int folderId) { if (folder.FolderId == folderId) { return(folder); } else if (!folder.SubFolders.Any()) { return(null); } else { foreach (var subFolder in folder.SubFolders) { var foundFolder = this.FindFolderWithId(subFolder, folderId); if (foundFolder != null) { return(foundFolder); } } return(null); } }
private async Task AttachSubFoldersAsync(int catalogId, int employeeId, OutputFolderServiceModel folder) { folder.SubFolders = (await this.folderDapper.GetSubFoldersAsync(folder.FolderId)).ToArray(); await this.AttachSubFoldersRecursivelyAsync(catalogId, employeeId, folder.SubFolders); }
private async Task DeleteFolderAndSubFoldersRecursivelyAsync(int catalogId, int employeeId, OutputFolderServiceModel folder) { // Cant delete the root folder if (folder is null || !folder.RootId.HasValue) { return; } // folders must be empty at this point var(isDeleted, insertedMessageId) = await this.folderDapper.DeleteAsync(catalogId, folder.FolderId); if (!isDeleted) { return; } // TODO: refactor when move to EF var messageData = new FolderDeletedMessage { FolderId = folder.FolderId }; await this.publisher.Publish(messageData); await this.messageService.MarkMessageAsPublishedAsync(insertedMessageId); foreach (var subFolder in folder.SubFolders) { await this.DeleteFolderAndSubFoldersRecursivelyAsync(catalogId, employeeId, subFolder); } }
private async Task <bool> DeleteFolderOperationsAsync(int catalogId, int employeeId, OutputFolderServiceModel existingFolder) { try { await this.CheckFolderPermissionsAsync(catalogId, existingFolder?.FolderId ?? 0, employeeId); await this.AttachSubFoldersAsync(catalogId, employeeId, existingFolder); await this.DeleteFilesAsync(catalogId, employeeId, existingFolder); await this.DeleteFolderAndSubFoldersRecursivelyAsync(catalogId, employeeId, existingFolder); return(true); } catch (FolderException) { throw; } catch (PermissionException) { throw; } catch { return(false); } }