| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2,10 +2,8 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// import httpStatus from 'http-status';
 | 
					 | 
					 | 
					 | 
					// import httpStatus from 'http-status';
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import fs from 'fs'; | 
					 | 
					 | 
					 | 
					import fs from 'fs'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import archiver from 'archiver'; | 
					 | 
					 | 
					 | 
					import archiver from 'archiver'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import { exec } from 'child_process'; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import multer from 'multer'; | 
					 | 
					 | 
					 | 
					import multer from 'multer'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import path from 'path'; | 
					 | 
					 | 
					 | 
					import path from 'path'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import { cloneDeep } from 'lodash'; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import { handler as ErrorHandel } from '../../middlewares/errors'; | 
					 | 
					 | 
					 | 
					import { handler as ErrorHandel } from '../../middlewares/errors'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// import ApiException from '../../../common/utils/APIException';
 | 
					 | 
					 | 
					 | 
					// import ApiException from '../../../common/utils/APIException';
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import { | 
					 | 
					 | 
					 | 
					import { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -14,6 +12,7 @@ import { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    storage as storageConfig | 
					 | 
					 | 
					 | 
					    storage as storageConfig | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} from '../../../config/vars'; | 
					 | 
					 | 
					 | 
					} from '../../../config/vars'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import uploadAdapter from '../../../common/services/adapters/upload-adapter'; | 
					 | 
					 | 
					 | 
					import uploadAdapter from '../../../common/services/adapters/upload-adapter'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import { cloneDeep, forEach } from 'lodash'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					function deleteFolderRecursive(folderPath) { | 
					 | 
					 | 
					 | 
					function deleteFolderRecursive(folderPath) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (fs.existsSync(folderPath)) { | 
					 | 
					 | 
					 | 
					    if (fs.existsSync(folderPath)) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -153,53 +152,41 @@ exports.delete = (req, res, next) => { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					exports.download = async (req, res, next) => { | 
					 | 
					 | 
					 | 
					exports.download = async (req, res, next) => { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    try { | 
					 | 
					 | 
					 | 
					    try { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        const user = req.user; | 
					 | 
					 | 
					 | 
					        const user = req.user; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        const namefile = `${user.name.replace(/\s/g, '')}-${Date.now()}.zip`; | 
					 | 
					 | 
					 | 
					        const namefile = `${user.name}-${Date.now()}.zip`; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`; | 
					 | 
					 | 
					 | 
					        const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        const folder = `${storageConfig.uri}/download/${user.id}`; | 
					 | 
					 | 
					 | 
					        const folder = `${storageConfig.uri}/download/${user.id}`; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        multer({ dest: `${folder}` }); | 
					 | 
					 | 
					 | 
					        multer({ dest: `${folder}` }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        await deleteFolderRecursive(folder); | 
					 | 
					 | 
					 | 
					        await deleteFolderRecursive(folder); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        let command = ` zip -r ${dir} `; | 
					 | 
					 | 
					 | 
					        const output = fs.createWriteStream(dir); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					        const archive = archiver('zip', { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // const output = fs.createWriteStream(dir);
 | 
					 | 
					 | 
					 | 
					            zlib: { level: 9 } // Sets the compression level.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // const archive = archiver('zip', {
 | 
					 | 
					 | 
					 | 
					        }); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        //     zlib: { level: 9 } // Sets the compression level.
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // });
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // archive.pipe(output);
 | 
					 | 
					 | 
					 | 
					        archive.pipe(output); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (req.body.data) { | 
					 | 
					 | 
					 | 
					        if (req.body.data) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            req.body.data.forEach((e) => { | 
					 | 
					 | 
					 | 
					            req.body.data.forEach((e) => { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                const path1 = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); | 
					 | 
					 | 
					 | 
					                const path = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					                // const path = e.path.replace(cdnConfig.uri, storageConfig.uri);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                command += `${path1} `; | 
					 | 
					 | 
					 | 
					                console.log('path', path); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                // const download = path.split("/");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                // download.splice( download.indexOf(`${user.id}`), 0, "download");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                // const final_path = download.join("/");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                if (e.isFolder) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    archive.directory(path, e.name); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    archive.file(path, { name: e.name }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            }); | 
					 | 
					 | 
					 | 
					            }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        console.log(command); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        exec(command, (error, stdout, stderr) => { | 
					 | 
					 | 
					 | 
					        archive.finalize(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (error) { | 
					 | 
					 | 
					 | 
					        return res.json({ | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                console.error(`Command execution error: ${error.message}`); | 
					 | 
					 | 
					 | 
					            code: 0, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return res.status(400).json({ | 
					 | 
					 | 
					 | 
					            data: { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    code: 400, | 
					 | 
					 | 
					 | 
					                name: namefile, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    message: 'error' | 
					 | 
					 | 
					 | 
					                path: `${cdnConfig.uri}/download/${user.id}/${namefile}`, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                }); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (stderr) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                console.error(`Command stderr: ${stderr}`); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return res.status(400).json({ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    code: 400, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    message: 'error' | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                }); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            console.log(`Command output: ${stdout}`); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            return res.json({ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                code: 0, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                data: { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    name: namefile, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    path: `${cdnConfig.uri}/download/${user.id}/${namefile}`, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            }); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }); | 
					 | 
					 | 
					 | 
					        }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } catch (ex) { | 
					 | 
					 | 
					 | 
					    } catch (ex) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return ErrorHandel(ex, req, res, next); | 
					 | 
					 | 
					 | 
					        return ErrorHandel(ex, req, res, next); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |