flexbiz-server
Version:
Flexible Server
23 lines (22 loc) • 10.9 kB
JavaScript
'use strict';const _global=require("../global"),async=require("async"),model=global.getModel("app"),Participant=global.getModel("participant"),fs=require("fs"),JSZip=require("jszip");require("../libs/prototypes.js");const _=require("lodash"),{parentPort,workerData}=require("worker_threads"),{ObjectId}=require("mongodb");let connect2Db=!1;
const coll_ex="user.js app.js dvcs socais socaitmps vatras vatvaos tdttnos tdttcos tdttno_tts tdttco_tts files folders notes accounts dmdvts currencies dmvts sokhos sokhotts sokhokhongtons sokhocapphats cdvts dmnvs cdnpheps bangtinhluongs cdkhs cdkts cddts cddiems sophanbokhs sotinhkhs qtsdieuchinhs hspbts dmqcts pkts pkcs dmkcs calllogs".split(" "),restoreColl=async($id_app$$,$dvcs_pairs$$,$data$$,$colls$$)=>(await Promise.all($colls$$.map($col_name$$=>{console.log("restore ",$col_name$$,"...");
return new Promise(($resolve$$,$reject$$)=>{let $rows$$=$data$$[$col_name$$]||[];$rows$$.forEach(($r$$,$index$$)=>{let $time$$=(new Date).getTime();$r$$.index=$index$$+$time$$;$r$$.line=$index$$+$time$$;$r$$.nh_dk=$index$$+$time$$});mongoose.connection.db.collection($col_name$$,($err$$,$coll$$)=>{if($err$$)return $reject$$($err$$);if(!$coll$$)return console.error("can't insert data, collection",$col_name$$,"is not exists"),$resolve$$([]);$coll$$.deleteMany({id_app:$id_app$$},$e$$=>{if($e$$)return $reject$$($e$$);
if(0===$rows$$.length)return $resolve$$([]);insert($col_name$$,$coll$$,$rows$$,$id_app$$,$dvcs_pairs$$).then($pairs$$=>{$resolve$$($pairs$$)}).catch($e$$=>{$reject$$($e$$)})})})})}))).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),insertOne=($col_name$$,$id_app$$,$coll$$,$rows$$,$dvcs_pairs$$=[],$update_book$$=!0)=>new Promise(($resolve$$,$reject$$)=>{async.mapSeries($rows$$,($row$$,$callback$$)=>{let $old_id$$=$row$$._id;delete $row$$._id;for(let $key$$ in $row$$)$row$$[$key$$]&&_.isString($row$$[$key$$])&&
0>$key$$.indexOf("user")&&(0<=$key$$.indexOf("ngay_")||0<=$key$$.indexOf("date"))&&($row$$[$key$$]=new Date($row$$[$key$$]));$coll$$.insertOne($row$$,async($e$$,$pair_rs$$)=>{if($e$$)return $callback$$($e$$);$e$$=$pair_rs$$.insertedId.toString();$pair_rs$$={old_id:$old_id$$,new_id:$e$$};$update_book$$&&(global.getModel("socai").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("socaitmp").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("sokho").updateMany({id_app:$row$$.id_app,
id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("sokhott").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("sokhocapphat").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("sokhokhongton").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("vatra").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("vatvao").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),0>$col_name$$.indexOf("file")&&
(global.getModel("file").updateMany({id_app:$row$$.id_app,id_link:$old_id$$},{id_link:$e$$}),global.getModel("file").updateMany({id_app:$row$$.id_app,id_folder:$old_id$$},{id_folder:$e$$})),0>$col_name$$.indexOf("folder")&&global.getModel("folder").updateMany({id_app:$row$$.id_app,id_link:$old_id$$},{id_link:$e$$}),0<=$col_name$$.indexOf("folder")&&global.getModel("folder").updateMany({id_app:$row$$.id_app,thu_muc_goc:$old_id$$},{thu_muc_goc:$e$$}),0>$col_name$$.indexOf("note")&&global.getModel("note").updateMany({id_app:$row$$.id_app,
id_link:$old_id$$},{id_link:$e$$}),0>$col_name$$.indexOf("tdttno")&&(global.getModel("tdttno").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("tdttno_tt").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("tdttno_tt").updateMany({id_app:$row$$.id_app,id_hd:$old_id$$},{id_hd:$e$$})),0>$col_name$$.indexOf("tdttco")&&(global.getModel("tdttco").updateMany({id_app:$row$$.id_app,id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("tdttco_tt").updateMany({id_app:$row$$.id_app,
id_ct:$old_id$$},{id_ct:$e$$}),global.getModel("tdttco_tt").updateMany({id_app:$row$$.id_app,id_hd:$old_id$$},{id_hd:$e$$})),0<=$col_name$$.indexOf("qts")&&(global.getModel("sophanbokh").updateMany({id_app:$row$$.id_app,id_ts:$old_id$$},{id_ts:$e$$}),global.getModel("sotinhkh").updateMany({id_app:$row$$.id_app,id_ts:$old_id$$},{id_ts:$e$$}),global.getModel("qts_dieuchinh").updateMany({id_app:$row$$.id_app,id_ts:$old_id$$},{id_ts:$e$$}),global.getModel("hspbts").updateMany({id_app:$row$$.id_app,id_ts:$old_id$$},
{id_ts:$e$$})),0<=$col_name$$.indexOf("dmnhvts")&&(global.getModel("dmvt").updateMany({id_app:$row$$.id_app,ma_nvt:$old_id$$},{ma_nvt:$e$$}),global.getModel("dmvt").updateMany({id_app:$row$$.id_app,ma_nvt2:$old_id$$},{ma_nvt2:$e$$}),global.getModel("dmvt").updateMany({id_app:$row$$.id_app,ma_nvt3:$old_id$$},{ma_nvt3:$e$$}),global.getModel("dmvt").updateMany({id_app:$row$$.id_app,ma_nvt4:$old_id$$},{ma_nvt4:$e$$})),0<=$col_name$$.indexOf("customer")&&global.getModel("calllog").updateMany({id_app:$row$$.id_app,
id_kh:$old_id$$},{id_kh:$e$$}));$callback$$(null,$pair_rs$$)})},async($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);await Promise.all($dvcs_pairs$$.map($pair$$=>(async()=>{$coll$$.updateMany({id_app:$id_app$$,ma_dvcs:$pair$$.old_id},{$set:{ma_dvcs:$pair$$.new_id}},()=>{console.log("updated dvcs",$col_name$$,$pair$$)})})()));$resolve$$($rs$$)})}),insert=($col_name$$,$coll$$,$rows$$,$id_app$$,$dvcs_pairs$$)=>{$rows$$=$rows$$.map($row$$=>{delete $row$$.__v;delete $row$$.pkey;$row$$.id_app=$id_app$$;return $row$$});
return"socais"===$col_name$$||"sokhos"===$col_name$$||"sokhott"===$col_name$$||"vatras"===$col_name$$||"vatvaos"===$col_name$$||"dvcs"===$col_name$$?insertOne($col_name$$,$id_app$$,$coll$$,$rows$$,$dvcs_pairs$$,!1):insertOne($col_name$$,$id_app$$,$coll$$,$rows$$,$dvcs_pairs$$,!0)},restore=$message$$=>{if($message$$.configs&&_.isString($message$$.configs))try{$message$$.configs=JSON.parse($message$$.configs)}catch($e$$){delete $message$$.configs,console.info($e$$)}const $configs$$=$message$$.configs||
require("../configs");connect2Db||(mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}),connect2Db=!0);let $id_app$$=$message$$.id,$user$$=$message$$.user,$fileZip$$=$message$$.file;model.findOne({_id:$id_app$$}).lean().exec(async($e$jscomp$0$$,$app$$)=>{if($e$jscomp$0$$||!$app$$)return parentPort.postMessage({error:$e$jscomp$0$$||"C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"});$e$jscomp$0$$=await Participant.findOne({email:$user$$,id_app:$id_app$$,admin:!0});if($app$$.user_created!==
$user$$&&!$e$jscomp$0$$)return parentPort.postMessage({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 n\u00e0y"});fs.readFile($fileZip$$,($err$jscomp$0$$,$dataZip$$)=>{if($err$jscomp$0$$)return parentPort.postMessage({error:$err$jscomp$0$$});try{JSZip.loadAsync($dataZip$$).then(function($zip$$){return $zip$$.file("backup.json").async("string")}).then($string_data$$=>{if($string_data$$){let $data$$=JSON.parse($string_data$$),$dvcs_pairs$$;async.series({app:$callback$$=>
{console.log("restore app...");let $appInfo$$=$data$$["app.js"];$appInfo$$?(delete $appInfo$$._id,delete $appInfo$$.__v,model.findOneAndUpdate({_id:$id_app$$},$appInfo$$,$e$$=>{if($e$$)return $callback$$($e$$);$callback$$()})):$callback$$()},dvcs:$callback$jscomp$0$$=>{async.mapSeries(coll_ex,($coll$$,$callback$$)=>{let $colls$$=Object.keys($data$$).filter($k$$=>$k$$==$coll$$);restoreColl($id_app$$,$dvcs_pairs$$,$data$$,$colls$$).then($pairs$$=>{"dvcs"==$coll$$&&($dvcs_pairs$$=$pairs$$);async.map($pairs$$,
($pair$$,$cb$$)=>{setImmediate(()=>{"dvcs"==$coll$$&&($string_data$$=$string_data$$.split($pair$$.old_id).join($pair$$.new_id));$cb$$()})},()=>{$callback$$()})}).catch($e$$=>{$callback$$($e$$)})},$e$$=>{$callback$jscomp$0$$($e$$)})},data:$callback$jscomp$0$$=>{let $colls$jscomp$0$$=Object.keys($data$$).filter($k$$=>0>coll_ex.indexOf($k$$));restoreColl($id_app$$,$dvcs_pairs$$,$data$$,$colls$jscomp$0$$).then($pairs$$=>{let $_data_goc$$=JSON.parse($string_data$$),$colls$$=Object.keys($_data_goc$$).filter($k$$=>
0>coll_ex.indexOf($k$$)),$data_replace$$={};$colls$$.forEach($c$$=>{$data_replace$$[$c$$]=($_data_goc$$[$c$$]||[]).map($r$$=>JSON.stringify($r$$))});async.mapSeries($pairs$$,($pair$$,$cb$$)=>{setImmediate(()=>{$colls$$.forEach($c$$=>{console.log("update pair",$pair$$,$c$$);$data_replace$$[$c$$]=$data_replace$$[$c$$].map($r$$=>0>$r$$.indexOf($pair$$.old_id)?$r$$:$r$$.split($pair$$.old_id).join($pair$$.new_id))});$cb$$()})},()=>{async.mapSeries($colls$$,($col_name$$,$callback3$$)=>{const $rows$$=$data_replace$$[$col_name$$];
console.log("update collection",$col_name$$,$rows$$.length,"rows");0<$rows$$.length?mongoose.connection.db.collection($col_name$$,($err$$,$coll$$)=>{if($err$$)return $callback3$$($err$$);if(!$coll$$)return console.error("can't update data. collection",$col_name$$,"is not exists"),$callback3$$();async.mapSeries($rows$$,($_row$$,$callback$$)=>{setImmediate(()=>{let $row$$=JSON.parse($_row$$);delete $row$$.__v;delete $row$$.pkey;$row$$.id_app=$id_app$$;let $_id$$=ObjectId($row$$._id);delete $row$$._id;
for(let $key$$ in $row$$)$row$$[$key$$]&&_.isString($row$$[$key$$])&&0>$key$$.indexOf("user")&&(0<=$key$$.indexOf("ngay_")||0<=$key$$.indexOf("date"))&&($row$$[$key$$]=new Date($row$$[$key$$]));$coll$$.updateOne({_id:$_id$$},{$set:$row$$},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);console.log("updated",$col_name$$,$rs$$.matchedCount,$rs$$.modifiedCount,$rs$$.upsertedId);$callback$$()})})},$e$$=>{console.log("updated collection",$col_name$$,"successfull");$callback3$$($e$$)})}):$callback3$$()},
$e$$=>{$e$$||console.log("all collections was restore successful");$callback$jscomp$0$$($e$$)})})}).catch($e$$=>{$callback$jscomp$0$$($e$$)})}},$e$$=>{if($e$$)return console.error($e$$),parentPort.postMessage({error:$e$$,id_task:$message$$.id_task});console.log("database was restore successful");parentPort.postMessage({result:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 kh\u00f4i ph\u1ee5c d\u1eef li\u1ec7u th\u00e0nh c\u00f4ng",id_task:$message$$.id_task})})}else return parentPort.postMessage({error:"File l\u01b0u tr\u1eef kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u",
id_task:$message$$.id_task})})}catch($e$$){return console.error($e$$),parentPort.postMessage({error:$e$$.message,id_task:$message$$.id_task})}})})};parentPort.on("message",$msg$$=>{if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}restore($msg$$)}else parentPort.postMessage({error:"msg is not valid"})});
workerData&&(()=>{let $msg$$=workerData;if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}$msg$$.id&&$msg$$.findOne&&restore($msg$$)})();setInterval(()=>{parentPort.postMessage("pong")},5E3);