From d9f173d028984228a6f883c9db92287b92cf0a9b Mon Sep 17 00:00:00 2001 From: helori_ollivier Date: Sun, 26 Apr 2026 15:27:39 +0200 Subject: [PATCH] added update folder + reworked folder fetching hierarchy --- api/controller/folder.controller.js | 62 +++++++++++++++++++---------- api/routes/folder.routes.js | 1 + 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/api/controller/folder.controller.js b/api/controller/folder.controller.js index 624fb35..80d9243 100644 --- a/api/controller/folder.controller.js +++ b/api/controller/folder.controller.js @@ -2,33 +2,35 @@ const folder = require('../models/folder.model'); exports.getFoldersByHierarchy = async (req, res) => { let folders = await folder.findAll(); + let hierarchy = [] for (let i = 0; i < folders.length; i++) { folders[i].dataValues.subFolders = [] } - console.log(folders); + let curNode = findByValue(folders, "folderParent", null); + while (folders.length > 0 && curNode != null) { + + let childNode = findByValue(folders, "folderParent", curNode.folderId) - let toRemove = [] - for (let i = (folders.length - 1); i >= 0; i--) { - - parent = findByValue(folders, "folderId", folders[i].folderParent); - if (parent != null) { - console.log("parent: ", parent); - parent.dataValues.subFolders.push(folders[i]); - - toRemove.push(i); + if (childNode) { + curNode.dataValues.subFolders.push(childNode); + curNode = childNode; } + else if (curNode.folderParent != null) { + folders.splice(folders.indexOf(curNode), 1); + curNode = findByValue(folders, "folderId", curNode.folderParent); + } + else { + folders.splice(folders.indexOf(curNode), 1); + hierarchy.push(curNode); + curNode = findByValue(folders, "folderParent", null); + + } + } - console.log(toRemove) - for (el of toRemove) { - folders.splice(el, 1); - } - - console.log(folders); - - res.json(folders); + res.json(hierarchy); } exports.getFolders = async (req, res) => { @@ -49,16 +51,34 @@ exports.getFoldersById = async (req, res) => { } exports.createFolder = async (req, res) => { - const josnFolder = req.body; + const jsonFolder = req.body; await folder.create({ - folderName: josnFolder.name, - folderParent: josnFolder.parent, + folderName: jsonFolder.name, + folderParent: jsonFolder.parent, }); res.status(201).json("ok"); } +exports.updateFolder = async (req, res) => { + + const folderId = req.params.id + const jsonFolder = req.body; + + await folder.update({ + folderName: jsonFolder.name, + folderParent: jsonFolder.parent, + }, + { + where: { + folderId: folderId, + }, + }); + + res.status(200).json("ok"); +} + function findByValue(list, key, value) { for (el of list) { diff --git a/api/routes/folder.routes.js b/api/routes/folder.routes.js index af1dbee..1a8516b 100644 --- a/api/routes/folder.routes.js +++ b/api/routes/folder.routes.js @@ -8,5 +8,6 @@ router.get('/folders/hierarchy', folderController.getFoldersByHierarchy); router.get('/folders/:id', folderController.getFoldersById); router.post('/folders', folderController.createFolder); +router.put('/folders/:id', folderController.updateFolder); module.exports = router; \ No newline at end of file