diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js index 867607f22..ac33cff5a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -30,6 +30,7 @@ import getFolder from './routes/getFolder.js'; import createFolder from './routes/createFolder.js'; import updateFolder from './routes/updateFolder.js'; import getFolderList from './routes/getFolderList.js'; +import deleteFolder from './routes/deleteFolder.js'; dotenv.config(); const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); @@ -116,6 +117,9 @@ app.post('/createfolder', createFolder); // update folder app.put('/folder/:folder_id', updateFolder); +// get folder list +app.delete('/folder/:folder_id', deleteFolder); + // get folder app.get('/folder/:folder_id', getFolder); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js new file mode 100644 index 000000000..d443eb390 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteFolder.js @@ -0,0 +1,74 @@ +export default async function deleteFolder(request, response) { + const apiToken = request.headers['x-api-token']; + const folderId = request.params.folder_id; + if (!apiToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + try { + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', apiToken); + tokenQuery.include('userId'); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const parseUser = JSON.parse(JSON.stringify(token)); + const userPtr = { + __type: 'Pointer', + className: '_User', + objectId: parseUser.userId.objectId, + }; + + const obj = new Parse.Query('contracts_Document'); + obj.equalTo('objectId', folderId); + obj.equalTo('IsArchive', true); + obj.equalTo('CreatedBy', userPtr); + const isFolderDeleted = await obj.first({ useMasterKey: true }); + if (!isFolderDeleted) { + const folder = new Parse.Query('contracts_Document'); + folder.equalTo('Folder', { + __type: 'Pointer', + className: 'contracts_Document', + objectId: folderId, + }); + + folder.notEqualTo('IsArchive', true); + folder.equalTo('CreatedBy', userPtr); + folder.equalTo('Type', 'Folder'); + const isSubItems = await folder.first({ useMasterKey: true }); + // console.log('isSubItems ', isSubItems); + if (isSubItems) { + return response + .status(400) + .json({ error: 'folder is not empty, contains document or folder.' }); + } else { + const deleteFolder = new Parse.Object('contracts_Document'); + deleteFolder.id = folderId; + deleteFolder.set('IsArchive', true); + const deleteRes = await deleteFolder.save(null, { useMasterKey: true }); + if (request.posthog) { + request.posthog?.capture({ + distinctId: parseUser.userId.email, + event: 'api_delete_folder', + properties: { response_code: 200 }, + }); + } + return response.json({ objectId: deleteRes.id, deletedAt: deleteRes.updatedAt }); + } + } else { + if (request.posthog) { + request.posthog?.capture({ + distinctId: parseUser.userId.email, + event: 'api_delete_folder', + properties: { response_code: 404 }, + }); + } + return response.status(404).json({ error: 'folder not found.' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err is delete folder API', err); + return response.status(400).json({ error: 'Something went wrong, please try again later!' }); + } +}