public FileSystemViewModel AddNode(IPrincipal user, long parentId, string nodeName, bool isFolder) { using (var db = new StebsDbContext()) { //Validate input and get necessary information var fileSystem = LoadFileSystem(user, db); var parent = fileSystem.Nodes.FirstOrDefault(folder => folder.Id == parentId); if (parent != null && parent is Folder && ValideNodeName(nodeName)) { //Create node if (isFolder) { var node = new Folder() { FileSystem = fileSystem, Folder = parent as Folder, Name = nodeName }; fileSystem.Nodes.Add(node); db.Folders.Add(node); } else { var node = new File() { FileSystem = fileSystem, Folder = parent as Folder, Name = nodeName }; fileSystem.Nodes.Add(node); db.Files.Add(node); } db.SaveChanges(); } return fileSystem?.ToViewModel(); } }
public FileSystemViewModel ChangeNodeName(IPrincipal user, long nodeId, string newNodeName) { using(var db = new StebsDbContext()) { var fileSystem = LoadFileSystem(user, db); var node = fileSystem.Nodes.FirstOrDefault(n => n.Id == nodeId); if(node != null && ValideNodeName(newNodeName)) { node.Name = newNodeName; db.SaveChanges(); } return fileSystem?.ToViewModel(); } }
public FileSystemViewModel DeleteNode(IPrincipal user, long nodeId) { using (var db = new StebsDbContext()) { var fileSystem = LoadFileSystem(user, db); var node = fileSystem.Nodes.FirstOrDefault(n => n.Id == nodeId); //Only delete folders if they're empty var validFolder = (!(node is Folder) || !(node as Folder).Children.Any()); //The root folder will not be deleted if (node != null && validFolder && fileSystem.Root.Id != node.Id) { node.Folder.Children.Remove(node); fileSystem.Nodes.Remove(node); if(node is Folder) { db.Folders.Remove(node as Folder); } else if(node is File) { db.Files.Remove(node as File); } db.SaveChanges(); } return fileSystem?.ToViewModel(); } }
public void SaveFileContent(IPrincipal user, long fileId, string fileContent) { using (var db = new StebsDbContext()) { var fileSystem = LoadFileSystem(user, db); var node = fileSystem.Nodes.FirstOrDefault(n => n.Id == fileId); if (node != null && node is File) { (node as File).Content = fileContent; db.SaveChanges(); } } }