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 = [] } let curNode = findByValue(folders, "folderParent", null); while (folders.length > 0 && curNode != null) { let childNode = findByValue(folders, "folderParent", curNode.folderId) 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); } } res.json(hierarchy); } exports.getFolders = async (req, res) => { const folders = await folder.findAll(); res.json(folders); } exports.getFoldersById = async (req, res) => { const id = req.params.id const folders = await folder.findAll({ where: { folderId: id, }}, ); res.json(folders); } exports.createFolder = async (req, res) => { const jsonFolder = req.body; await folder.create({ 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) { if (el[key] == value) { return el; } } return null; }