From 2ec6d39effc167e3924e0841f8ed68e3b22eebd5 Mon Sep 17 00:00:00 2001 From: subnub Date: Wed, 7 Aug 2024 02:56:35 -0400 Subject: [PATCH] Added finishing touches to mover --- backend/db/utils/fileUtils/index.ts | 29 +++++- backend/db/utils/folderUtils/index.ts | 11 +-- backend/services/ChunkService/index.ts | 2 +- backend/services/FolderService/index.ts | 121 +++++------------------- 4 files changed, 56 insertions(+), 107 deletions(-) diff --git a/backend/db/utils/fileUtils/index.ts b/backend/db/utils/fileUtils/index.ts index 75db0b1..aa85ff6 100644 --- a/backend/db/utils/fileUtils/index.ts +++ b/backend/db/utils/fileUtils/index.ts @@ -198,7 +198,7 @@ class DbUtil { return file; }; - getFileListByParent = async ( + getFileListByIncludedParent = async ( userID: string | mongoose.Types.ObjectId, parentListString: string ) => { @@ -215,6 +215,33 @@ class DbUtil { return fileList; }; + + getFileListByParent = async (userID: string, parent: string) => { + const fileList = await File.find({ + owner: userID, + "metadata.parent": parent, + }); + + return fileList; + }; + + moveMultipleFiles = async ( + userID: string | mongoose.Types.ObjectId, + currentParent: string, + newParent: string, + newParentList: string + ) => { + await File.updateMany( + { "metadata.owner": userID, "metadata.parent": currentParent }, + { + $set: { + "metadata.parent": newParent, + "metadata.parentList": newParentList, + }, + }, + { new: true } + ); + }; } export default DbUtil; diff --git a/backend/db/utils/folderUtils/index.ts b/backend/db/utils/folderUtils/index.ts index eb0df20..575df06 100644 --- a/backend/db/utils/folderUtils/index.ts +++ b/backend/db/utils/folderUtils/index.ts @@ -196,9 +196,9 @@ class DbUtil { const idQuery = []; - if (currentParent && currentParent !== "/") { - idQuery.push(currentParent); - } + // if (currentParent && currentParent !== "/") { + // idQuery.push(currentParent); + // } if (folderID) { query.parentList = { $ne: folderID }; @@ -215,9 +215,7 @@ class DbUtil { query.name = new RegExp(search, "i"); } - console.log("query", query); - - const result = await Folder.find(query); + const result = await Folder.find(query).sort({ createdAt: -1 }); return result; }; @@ -228,6 +226,7 @@ class DbUtil { parentList: { $in: parent, }, + trashed: null, }); return folderList; diff --git a/backend/services/ChunkService/index.ts b/backend/services/ChunkService/index.ts index c46910d..1356ca1 100644 --- a/backend/services/ChunkService/index.ts +++ b/backend/services/ChunkService/index.ts @@ -373,7 +373,7 @@ class StorageService { }); await Folder.deleteMany({ owner: userID, _id: folderID }); - const fileList = await dbUtilsFile.getFileListByParent( + const fileList = await dbUtilsFile.getFileListByIncludedParent( userID, parentList.toString() ); diff --git a/backend/services/FolderService/index.ts b/backend/services/FolderService/index.ts index 25255f4..40cbb85 100644 --- a/backend/services/FolderService/index.ts +++ b/backend/services/FolderService/index.ts @@ -248,123 +248,46 @@ class FolderService { }; moveFolder = async (userID: string, folderID: string, parentID: string) => { - console.log("parentID", parentID); const foldersByIncludedParent = await utilsFolder.getFolderListByIncludedParent(userID, folderID); - //const newParentList = []; + const startParentList = []; if (parentID !== "/") { const folderToMoveTo = await utilsFolder.getFolderInfo(parentID, userID); - if (!folderToMoveTo) { throw new NotFoundError("Move Folder Not Found Error"); } - - for (let i = 0; i < foldersByIncludedParent.length; i++) { - const currentFolder = foldersByIncludedParent[i]; - - const currentParentIndex = currentFolder.parentList.indexOf(folderID); - - const newParentList = [ - ...folderToMoveTo.parentList, - folderToMoveTo._id.toString(), - ...currentFolder.parentList.slice(currentParentIndex + 1), - ]; - - console.log("new parent list", newParentList); - - await utilsFolder.moveFolder( - folderID, - userID, - folderToMoveTo._id.toString(), - newParentList - ); - } + startParentList.push( + ...folderToMoveTo.parentList, + folderToMoveTo._id.toString() + ); } else { - // newParentList.push("/"); + startParentList.push("/"); } - console.log("foldersByIncludedParent", foldersByIncludedParent); + for (let i = 0; i < foldersByIncludedParent.length; i++) { + const currentFolder = foldersByIncludedParent[i]; - return; - let parentList = ["/"]; + const currentParentIndex = currentFolder.parentList.indexOf(folderID); - // if (parentID.length !== 1) { - // const parentFile = await utilsFolder.getFolderInfo(parentID, userID); + const newParentList = []; - // if (!parentFile) throw new NotFoundError("Parent Folder Info Not Found"); - - // parentList = parentFile.parentList; - // parentList.push(parentID); - // } - - const folder = await utilsFolder.moveFolder( - folderID, - userID, - parentID, - parentList - ); - - if (!folder) throw new NotFoundError("Move Folder Not Found"); - - const folderChilden = await utilsFolder.findAllFoldersByParent( - folderID.toString(), - userID - ); - - folderChilden.map(async (currentFolderChild) => { - let currentFolderChildParentList = currentFolderChild.parentList; - - const indexOfFolderID = currentFolderChildParentList.indexOf( - folderID.toString() + newParentList.push( + ...startParentList, + ...currentFolder.parentList.slice(currentParentIndex + 1) ); - currentFolderChildParentList = - currentFolderChildParentList.splice(indexOfFolderID); - - currentFolderChildParentList = [ - ...parentList, - ...currentFolderChildParentList, - ]; - - currentFolderChild.parentList = currentFolderChildParentList; - - await currentFolderChild.save(); - }); - - const fileChildren = await utilsFile.getFileListByParent( - userID, - folderID.toString() - ); - - fileChildren.map(async (currentFileChild) => { - let currentFileChildParentList: string | string[] = - currentFileChild.metadata.parentList; - - currentFileChildParentList = currentFileChildParentList.split(","); - - const indexOfFolderID = currentFileChildParentList.indexOf( - folderID.toString() - ); - - currentFileChildParentList = - currentFileChildParentList.splice(indexOfFolderID); - - currentFileChildParentList = [ - ...parentList, - ...currentFileChildParentList, - ]; - - if (currentFileChild._id) { - await utilsFile.moveFile( - currentFileChild._id, + await Promise.all([ + utilsFolder.moveFolder(folderID, userID, parentID, newParentList), + utilsFile.moveMultipleFiles( userID, - currentFileChild.metadata.parent, - currentFileChildParentList.toString() - ); - } - }); + currentFolder._id.toString(), + parentID, + newParentList.toString() + ), + ]); + } }; }