const express = require('express'); const { dbJobAnvilSyncShared, dbQuery, dbSubRefreshTimestamp, dbWrite, } = require('../lib/accessDB'); const getFilesOverview = require('../lib/request_handlers/files/getFilesOverview'); const getFileDetail = require('../lib/request_handlers/files/getFileDetail'); const uploadSharedFiles = require('../middlewares/uploadSharedFiles'); const router = express.Router(); router .delete('/:fileUUID', (request, response) => { const { fileUUID } = request.params; const FILE_TYPE_DELETED = 'DELETED'; const [[oldFileType]] = dbQuery( `SELECT file_type FROM files WHERE file_uuid = '${fileUUID}';`, ).stdout; if (oldFileType !== FILE_TYPE_DELETED) { dbWrite( `UPDATE files SET file_type = '${FILE_TYPE_DELETED}', modified_date = '${dbSubRefreshTimestamp()}' WHERE file_uuid = '${fileUUID}';`, ).stdout; dbJobAnvilSyncShared('purge', `file_uuid=${fileUUID}`, '0136', '0137', { jobHostUUID: 'all', }); } response.status(204).send(); }) .get('/', getFilesOverview) .get('/:fileUUID', getFileDetail) .post('/', uploadSharedFiles.single('file'), ({ file, body }, response) => { console.log('Receiving shared file.'); if (file) { console.log(`file: ${JSON.stringify(file, null, 2)}`); console.log(`body: ${JSON.stringify(body, null, 2)}`); dbJobAnvilSyncShared( 'move_incoming', `file=${file.path}`, '0132', '0133', ); response.status(200).send(); } }) .put('/:fileUUID', (request, response) => { console.log('Begin edit single file.'); console.dir(request.body); const { fileUUID } = request.params; const { fileName, fileLocations, fileType } = request.body; const anvilSyncSharedFunctions = []; let query = ''; if (fileName) { const [[oldFileName]] = dbQuery( `SELECT file_name FROM files WHERE file_uuid = '${fileUUID}';`, ).stdout; console.log(`oldFileName=[${oldFileName}],newFileName=[${fileName}]`); if (fileName !== oldFileName) { query += ` UPDATE files SET file_name = '${fileName}', modified_date = '${dbSubRefreshTimestamp()}' WHERE file_uuid = '${fileUUID}';`; anvilSyncSharedFunctions.push(() => dbJobAnvilSyncShared( 'rename', `file_uuid=${fileUUID}\nold_name=${oldFileName}\nnew_name=${fileName}`, '0138', '0139', { jobHostUUID: 'all' }, ), ); } } if (fileType) { query += ` UPDATE files SET file_type = '${fileType}', modified_date = '${dbSubRefreshTimestamp()}' WHERE file_uuid = '${fileUUID}';`; anvilSyncSharedFunctions.push(() => dbJobAnvilSyncShared( 'check_mode', `file_uuid=${fileUUID}`, '0143', '0144', { jobHostUUID: 'all' }, ), ); } if (fileLocations) { fileLocations.forEach(({ fileLocationUUID, isFileLocationActive }) => { let fileLocationActive = 0; let jobName = 'purge'; let jobTitle = '0136'; let jobDescription = '0137'; if (isFileLocationActive) { fileLocationActive = 1; jobName = 'pull_file'; jobTitle = '0132'; jobDescription = '0133'; } query += ` UPDATE file_locations SET file_location_active = '${fileLocationActive}', modified_date = '${dbSubRefreshTimestamp()}' WHERE file_location_uuid = '${fileLocationUUID}';`; const targetHosts = dbQuery( `SELECT anv.anvil_node1_host_uuid, anv.anvil_node2_host_uuid, anv.anvil_dr1_host_uuid FROM anvils AS anv JOIN file_locations AS fil_loc ON anv.anvil_uuid = fil_loc.file_location_anvil_uuid WHERE fil_loc.file_location_uuid = '${fileLocationUUID}';`, ).stdout; targetHosts.flat().forEach((hostUUID) => { if (hostUUID) { anvilSyncSharedFunctions.push(() => dbJobAnvilSyncShared( jobName, `file_uuid=${fileUUID}`, jobTitle, jobDescription, { jobHostUUID: hostUUID }, ), ); } }); }); } console.log(`Query (type=[${typeof query}]): [${query}]`); let queryStdout; try { ({ stdout: queryStdout } = dbWrite(query)); } catch (queryError) { console.log(`Query error: ${queryError}`); response.status(500).send(); } console.log( `Query stdout (type=[${typeof queryStdout}]): ${JSON.stringify( queryStdout, null, 2, )}`, ); anvilSyncSharedFunctions.forEach((fn, index) => { console.log( `Anvil sync shared [${index}] output: [${JSON.stringify( fn(), null, 2, )}]`, ); }); response.status(200).send(queryStdout); }); module.exports = router;