flexbiz-server 12.3.46 → 12.3.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.3.46",
5
+ "version": "12.3.47",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
package/server/app.js CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const os=require("os"),express=require("express"),bodyParser=require("body-parser"),crypto=require("crypto"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),{transactionMiddleware}=require("./transactionMiddleware.js"),defaultConfigs=require("./defaultConfigs"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,
3
- ...$options$$.configs,lite:$options$$.lite};$configs$$.database.url=process.env.MONGO_URI||$configs$$.database.url;const $User$$=global.getModel("user");$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");var $_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$options$$.port||$configs$$.port||$configs$$.PORT||
4
- 443;$configs$$.port=$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$;global.port=$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",
5
- $req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());
6
- $app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$app$$.use(transactionMiddleware());$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());
7
- $_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),crypto=require("crypto"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs,lite:$options$$.lite};$configs$$.database.url=
3
+ process.env.MONGO_URI||$configs$$.database.url;const $User$$=global.getModel("user");$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");var $_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$options$$.port||$configs$$.port||$configs$$.PORT||443;$configs$$.port=$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$;
4
+ global.port=$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):
5
+ $next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=
6
+ $req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
7
+ $configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,
8
8
  limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});!0!==$options$$.lite&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.templates||
9
9
  __dirname+"/templates")),$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images")));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));$app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||"1mb",extended:!0}));$app$$.use(passport.initialize());$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("morgan");var $accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+
10
10
  "/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server Error!")});console.log("[app] connect to mongodb",
package/server/cluster.js CHANGED
@@ -1,23 +1,23 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),crypto=require("crypto"),_global=require("./global"),{transactionMiddleware}=require("./transactionMiddleware.js"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=
3
- 9999,$options$$={start_import_data_pool:!1,start_report_pool:!0,useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster,lite:$options$$.lite,port:$_port_accessLogStream_rfs$$};$configs$$.database.url=process.env.MONGO_URI||$configs$$.database.url;$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=
4
- [...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");$configs$$.port=$_port_accessLogStream_rfs$$;global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",
5
- $req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$());
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,start_report_pool:!0,
3
+ useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster,lite:$options$$.lite,port:$_port_accessLogStream_rfs$$};$configs$$.database.url=process.env.MONGO_URI||$configs$$.database.url;$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||
4
+ ($configs$$.public_token="flex.public.token");$configs$$.port=$_port_accessLogStream_rfs$$;global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),
5
+ $res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$());
6
6
  $app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$());
7
- $app$$.use(transactionMiddleware());$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=
8
- require("multer")({dest:$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$);$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("cors");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>
9
- {$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public"));$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin"));$app$$.use("/templates",express.static($configs$$.paths.templates||__dirname+"/templates"));$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images"));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));$app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||
10
- "1mb",extended:!0}));$app$$.use(passport.initialize());$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("morgan");$_port_accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$_port_accessLogStream_rfs$$=$_port_accessLogStream_rfs$$("access-cluster.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$("combined",
11
- {stream:$_port_accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server error!")});console.log("[cluster] connect to mongodb",$configs$$.database.url);$configs$$.database.url||(console.error("[cluster] thi\u1ebfu \u0111\u01b0\u1eddng d\u1eabn k\u1ebft n\u1ed1i v\u1edbi database trong file configs"),process.exit(1));global.mongoose.connect($configs$$.database.url,
12
- {useNewUrlParser:!0}).then(async $clientMongo_redis$$=>{console.log("[cluster] Connected to Database");global.clientMongo=$clientMongo_redis$$;$clientMongo_redis$$=require("redis");const {retryStrategyRedis:$retryStrategyRedis$$}=require("./libs/utils");global.clientRedis=$clientMongo_redis$$.createClient({host:"127.0.0.1",port:6379,retry_strategy:$retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>console.error("[cluster] Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("[cluster] Redis connection closed.")});
13
- global.clientRedis.on("connect",async function(){function $initSysData$$(){console.log("[cluster] creating system data...");const $files$$=fs.readdirSync(__dirname+"/data/sys");$async$$.mapSeries($files$$,function($file$$,$callback$jscomp$0$$){setImmediate(()=>{if(".js"==$file$$.substr(-3)){const $data$$=JSON.parse(JSON.stringify(require("./data/sys/"+$file$$).data)),$model$$=global.getModel(""+$file$$);console.log("[cluster] creating system data...",$file$$);$model$$.deleteMany({},$e$$=>{console.error($e$$);
14
- $async$$.mapSeries($data$$,function($r$$,$callback$$){delete $r$$._id;delete $r$$.__v;delete $r$$.collection_name;delete $r$$.pkey;$model$$.create($r$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$()})},function($error$$,$rs$$){$callback$jscomp$0$$($error$$,$rs$$)})})}else $callback$jscomp$0$$()})},function($error$$){if($error$$)return console.log($error$$);console.log("[cluster] created system data")})}console.log("redis connected");0!=$options$$.createRedisCache&&require("./libs/redis-cache").set();
15
- global.getModel("schedule").start();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();var $StaticPool$$=global.getModel("user"),$cpus_init_system_data_report_cpus_server$$=$configs$$.initSysData;$cpus_init_system_data_report_cpus_server$$||await $StaticPool$$.findOne({})||($cpus_init_system_data_report_cpus_server$$=!0);for($StaticPool$jscomp$0$$=0;$StaticPool$jscomp$0$$<$configs$$.adminUsers.length;$StaticPool$jscomp$0$$++){var $StaticPool_adminUser$$=$configs$$.adminUsers[$StaticPool$jscomp$0$$];
16
- let $u$$=await $StaticPool$$.findOne({email:$StaticPool_adminUser$$.email});$u$$||($StaticPool_adminUser$$.local={name:$StaticPool_adminUser$$.name,email:$StaticPool_adminUser$$.email,active:!0},$u$$=new $StaticPool$$($StaticPool_adminUser$$),$u$$.local.password=$u$$.generateHash($StaticPool_adminUser$$.email+$StaticPool_adminUser$$.defaultPassword),$u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);$user$$&&console.log("[cluster] da tao thanh cong user "+$user$$.email)}))}const $async$$=
17
- require("async");$cpus_init_system_data_report_cpus_server$$&&$initSysData$$();require("./route")($app$$);$cpus_init_system_data_report_cpus_server$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$cpus_init_system_data_report_cpus_server$$.timeout=6E5;$StaticPool$$.initSocket($cpus_init_system_data_report_cpus_server$$);$StaticPool$$.initClientSockets();if(!1!==$options$$.cluster){if(!require("sticky-session").listen($cpus_init_system_data_report_cpus_server$$,
18
- global.port))$cpus_init_system_data_report_cpus_server$$.once("listening",function(){console.log("[cluster] server cluster started on",global.port)});$StaticPool$$=require("cluster");$StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("[cluster] worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool$$.on("online",function($worker$$){console.info("[cluster] worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",JSON.stringify({pid:$worker$$.process.pid}))})}else $cpus_init_system_data_report_cpus_server$$.listen(global.port,
19
- ()=>{console.log("[cluster] server start at "+global.port+" port")});$cpus_init_system_data_report_cpus_server$$=os.cpus().length;$StaticPool$$=$options$$.import_cpus||($options$$.start_import_data_pool?$options$$.start_report_pool||$options$$.start_input_data_pool?1:Math.round($cpus_init_system_data_report_cpus_server$$/2):0);var $StaticPool$jscomp$0$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_init_system_data_report_cpus_server$$/2),2):0);$cpus_init_system_data_report_cpus_server$$=
20
- $options$$.report_cpus||($options$$.start_import_data_pool?Math.max(Math.min($cpus_init_system_data_report_cpus_server$$-$StaticPool$jscomp$0$$-$StaticPool$$,Math.round($cpus_init_system_data_report_cpus_server$$/2))-1,2):0);$StaticPool$jscomp$0$$&&($StaticPool_adminUser$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_adminUser$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$0$$,3E5,$StaticPool$jscomp$0$$,"input pool"),global.inputMainPool.exec({load:!0,
7
+ $_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$,
8
+ limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$);$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("cors");$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$app$$.use("/",express.static($configs$$.paths.public||
9
+ __dirname+"/public"));$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin"));$app$$.use("/templates",express.static($configs$$.paths.templates||__dirname+"/templates"));$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images"));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));$app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||"1mb",extended:!0}));$app$$.use(passport.initialize());$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=
10
+ require("morgan");$_port_accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$_port_accessLogStream_rfs$$=$_port_accessLogStream_rfs$$("access-cluster.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$("combined",{stream:$_port_accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));
11
+ $app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server error!")});console.log("[cluster] connect to mongodb",$configs$$.database.url);$configs$$.database.url||(console.error("[cluster] thi\u1ebfu \u0111\u01b0\u1eddng d\u1eabn k\u1ebft n\u1ed1i v\u1edbi database trong file configs"),process.exit(1));global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async $clientMongo_redis$$=>{console.log("[cluster] Connected to Database");
12
+ global.clientMongo=$clientMongo_redis$$;$clientMongo_redis$$=require("redis");const {retryStrategyRedis:$retryStrategyRedis$$}=require("./libs/utils");global.clientRedis=$clientMongo_redis$$.createClient({host:"127.0.0.1",port:6379,retry_strategy:$retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>console.error("[cluster] Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("[cluster] Redis connection closed.")});global.clientRedis.on("connect",async function(){function $initSysData$$(){console.log("[cluster] creating system data...");
13
+ const $files$$=fs.readdirSync(__dirname+"/data/sys");$async$$.mapSeries($files$$,function($file$$,$callback$jscomp$0$$){setImmediate(()=>{if(".js"==$file$$.substr(-3)){const $data$$=JSON.parse(JSON.stringify(require("./data/sys/"+$file$$).data)),$model$$=global.getModel(""+$file$$);console.log("[cluster] creating system data...",$file$$);$model$$.deleteMany({},$e$$=>{console.error($e$$);$async$$.mapSeries($data$$,function($r$$,$callback$$){delete $r$$._id;delete $r$$.__v;delete $r$$.collection_name;
14
+ delete $r$$.pkey;$model$$.create($r$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$()})},function($error$$,$rs$$){$callback$jscomp$0$$($error$$,$rs$$)})})}else $callback$jscomp$0$$()})},function($error$$){if($error$$)return console.log($error$$);console.log("[cluster] created system data")})}console.log("redis connected");0!=$options$$.createRedisCache&&require("./libs/redis-cache").set();global.getModel("schedule").start();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();
15
+ var $StaticPool$$=global.getModel("user"),$cpus_init_system_data_report_cpus_server$$=$configs$$.initSysData;$cpus_init_system_data_report_cpus_server$$||await $StaticPool$$.findOne({})||($cpus_init_system_data_report_cpus_server$$=!0);for($StaticPool$jscomp$0$$=0;$StaticPool$jscomp$0$$<$configs$$.adminUsers.length;$StaticPool$jscomp$0$$++){var $StaticPool_adminUser$$=$configs$$.adminUsers[$StaticPool$jscomp$0$$];let $u$$=await $StaticPool$$.findOne({email:$StaticPool_adminUser$$.email});$u$$||($StaticPool_adminUser$$.local=
16
+ {name:$StaticPool_adminUser$$.name,email:$StaticPool_adminUser$$.email,active:!0},$u$$=new $StaticPool$$($StaticPool_adminUser$$),$u$$.local.password=$u$$.generateHash($StaticPool_adminUser$$.email+$StaticPool_adminUser$$.defaultPassword),$u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);$user$$&&console.log("[cluster] da tao thanh cong user "+$user$$.email)}))}const $async$$=require("async");$cpus_init_system_data_report_cpus_server$$&&$initSysData$$();require("./route")($app$$);
17
+ $cpus_init_system_data_report_cpus_server$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$cpus_init_system_data_report_cpus_server$$.timeout=6E5;$StaticPool$$.initSocket($cpus_init_system_data_report_cpus_server$$);$StaticPool$$.initClientSockets();if(!1!==$options$$.cluster){if(!require("sticky-session").listen($cpus_init_system_data_report_cpus_server$$,global.port))$cpus_init_system_data_report_cpus_server$$.once("listening",function(){console.log("[cluster] server cluster started on",
18
+ global.port)});$StaticPool$$=require("cluster");$StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("[cluster] worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool$$.on("online",function($worker$$){console.info("[cluster] worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",JSON.stringify({pid:$worker$$.process.pid}))})}else $cpus_init_system_data_report_cpus_server$$.listen(global.port,()=>{console.log("[cluster] server start at "+
19
+ global.port+" port")});$cpus_init_system_data_report_cpus_server$$=os.cpus().length;$StaticPool$$=$options$$.import_cpus||($options$$.start_import_data_pool?$options$$.start_report_pool||$options$$.start_input_data_pool?1:Math.round($cpus_init_system_data_report_cpus_server$$/2):0);var $StaticPool$jscomp$0$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_init_system_data_report_cpus_server$$/2),2):0);$cpus_init_system_data_report_cpus_server$$=$options$$.report_cpus||
20
+ ($options$$.start_import_data_pool?Math.max(Math.min($cpus_init_system_data_report_cpus_server$$-$StaticPool$jscomp$0$$-$StaticPool$$,Math.round($cpus_init_system_data_report_cpus_server$$/2))-1,2):0);$StaticPool$jscomp$0$$&&($StaticPool_adminUser$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_adminUser$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$0$$,3E5,$StaticPool$jscomp$0$$,"input pool"),global.inputMainPool.exec({load:!0,
21
21
  configs:JSON.stringify($configs$$)},()=>{console.log("[cluster] Crud pool ready")}));$StaticPool$$&&($StaticPool$jscomp$0$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool$jscomp$0$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$$,36E5,1,"import pool"),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[cluster] Import pool ready")}));$cpus_init_system_data_report_cpus_server$$&&($StaticPool$$=
22
22
  require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,$cpus_init_system_data_report_cpus_server$$,3E5,2,"report pool"),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[cluster] Report pool ready")}))})}).catch($err$$=>{console.error("[cluster] Not Connected to Database ERROR!",$err$$)})};
23
23
  process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error("[cluster]",(new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
@@ -1,4 +1,4 @@
1
- 'use strict';const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks,deletePost}=require("./controllerUtils"),create=async($ctrl$$,
1
+ 'use strict';const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks,deletePost}=require("./controllerUtils"),createHanlder=async($ctrl$$,
2
2
  $req$$,$callback$jscomp$1$$)=>{let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||($action$$="add");let $listinfo_code$$=$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query["listinfo-code"]||$data$$.listinfo_code;if($listinfo_code$$&&$listinfo_code$$!=$ctrl$$.name){const $listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$}).lean();if(!$listinfo$$)return $callback$jscomp$1$$({error:`listinfo_code ${$listinfo_code$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});
3
3
  if(($listinfo$$.api_code||$listinfo$$.code)!=$ctrl$$.name)return $callback$jscomp$1$$({error:`listinfo_code ${$listinfo_code$$} kh\u00f4ng h\u1ee3p l\u1ec7`})}$listinfo_code$$=$listinfo_code$$||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;$data$$.listinfo_code=$listinfo_code$$;try{const $model$$=$ctrl$$.model;let $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$listinfo_code$$.toLowerCase()}).lean()||
4
4
  {}).option;$voucher_options$$||$ctrl$$.name===$listinfo_code$$||($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option);const $schema_paths$$=$model$$.schema.paths;let $v_data$$;try{$v_data$$=await asyncBodyToJson($data$$,$ctrl$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$jscomp$1$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());
@@ -33,4 +33,4 @@ var $co_gia_tri_tam_html$$=!1;$obj$$.exfields&&$obj$$.exfields.__files__&&($obj$
33
33
  collection_link:$ctrl$$.collection_name}).lean().then(()=>{})}).catch($e$$=>{console.error("support updateone",$e$$)}),delete $obj$$.exfields.__supports__,$co_gia_tri_tam_html$$=!0);$co_gia_tri_tam_html$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?$ctrl$$.created($user$$,$obj$$,function($error$jscomp$0$$,$rs$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);
34
34
  $req$$&&$req$$.uploadFile?($error$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>",$callback$$(null,$error$$)):$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$rs$$)})}):$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$jscomp$12_html$$){if($error$jscomp$12_html$$)return $callback$$($error$jscomp$12_html$$);
35
35
  $req$$&&$req$$.uploadFile?($error$jscomp$12_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$error$jscomp$12_html$$)):$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$req$$&&$req$$.uploadFile?($co_gia_tri_tam_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$co_gia_tri_tam_html$$)):$callback$$(null,$obj$$)})}],($e$$,$obj_created$$)=>{$e$$?(console.error($e$$),$callback$jscomp$1$$($e$$)):($e$$=
36
- $model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$jscomp$1$$(null,{obj_created:$obj_created$$}))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};module.exports=create;
36
+ $model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$jscomp$1$$(null,{obj_created:$obj_created$$}))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}},{handlerWithSesssion}=require("../libs/sessionContext.js"),creatWithSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(createHanlder,$ctrl$$,$req$$,$callback$$)};module.exports=creatWithSesssion;
@@ -1,4 +1,4 @@
1
1
  'use strict';const permission=require("../libs/permission"),{ERRORS}=require("./controllerUtils"),createRouteHandler=async($ctrl$$,$req$$,$callback$$)=>{let $res_send$$=!1;const {routeName:$routeName$$,route_action_key:$route_action_key$$,_options:$_options$$}=$req$$;if(!1===$ctrl$$.require_id_app)try{$ctrl$$[$route_action_key$$]($req$$,function($e$$,$rs$$){if($res_send$$)return console.error("route",$routeName$$,"sent header. callback had call");if($e$$){console.error("create route",$routeName$$,
2
2
  $e$$);if($e$$.error)return $res_send$$=!0,$callback$$($e$$);$res_send$$=!0;return $callback$$({error:$e$$.message||$e$$})}$res_send$$=!0;return $callback$$(null,$rs$$)})}catch($e$$){return console.error("route",$routeName$$,$e$$),$res_send$$=!0,$callback$$({error:$e$$.message||$e$$})}else{let $id_app$$=$req$$.params.id_app,$notNeedRight$$=$_options$$.notNeedRight||await $ctrl$$.notNeedRight($req$$.user);permission.hasRight($id_app$$,$req$$.user.email,$ctrl$$.module,"view",function($error$$,$hr$$){if($res_send$$)return console.error("route",
3
3
  $routeName$$,"sent header. hasRight had call");if($hr$$)try{$ctrl$$[$route_action_key$$]($req$$,function($e$$,$rs$$){$res_send$$&&console.error("route",$routeName$$,"sent header. callback had call");if($e$$){if($e$$.error)return $res_send$$=!0,$callback$$($e$$);$res_send$$=!0;return $callback$$({error:$e$$.message||$e$$})}$res_send$$=!0;return $callback$$(null,$rs$$)})}catch($e$$){return $res_send$$=!0,console.error("route",$routeName$$,$e$$),$callback$$({error:$e$$.message||$e$$})}else return $res_send$$=
4
- !0,$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},{notNeedRight:$notNeedRight$$})}};module.exports=createRouteHandler;
4
+ !0,$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},{notNeedRight:$notNeedRight$$})}},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(createRouteHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -9,4 +9,4 @@ $hr$$){if($hr$$)checkReference($model$$,$obj$jscomp$2$$,function($error$$){if($e
9
9
  $e$jscomp$1$$),$e$jscomp$1$$.error?$callback$$($e$jscomp$1$$):$callback$$({error:$e$jscomp$1$$.message||$e$jscomp$1$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$jscomp$0$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$jscomp$0$$._id},function($e$jscomp$0$$){if($e$jscomp$0$$)return console.error("delete object",$e$jscomp$0$$),$e$jscomp$0$$.error?$callback$$($e$jscomp$0$$):$callback$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$});
10
10
  setImmediate(()=>{$ctrl$$.deleteData({...$obj$jscomp$0$$});global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$jscomp$0$$._id,data:$obj$jscomp$0$$}},$req$$.user.email,$req$$.user_agent,$req$$);global.getModel("log").deleteMany({$or:[{id_a:$obj$jscomp$0$$._id},{id_b:$obj$jscomp$0$$._id}]},function($e$$){$e$$&&console.error("Can't delete links\n"+$e$$)})});setImmediate(()=>{$ctrl$$.emit("deleted",$obj$jscomp$0$$);global.getModel("customer").updateActives&&
11
11
  global.getModel("customer").updateActives($obj$jscomp$0$$);runWebhooks($ctrl$$,$obj$jscomp$0$$,"DELETE")});pushNotification($ctrl$$,$obj$jscomp$0$$,"delete",null,null,{exclude_token:$req$$.query.access_token});setImmediate(()=>{$ctrl$$.deleted?$ctrl$$.deleted($req$$.user,$obj$jscomp$0$$,function($e$$,$obj$$){setImmediate(()=>{if($e$$)return console.error("deleted",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$obj$$;$callback$$(null)})}):($req$$.obj=$obj$jscomp$0$$,
12
- $callback$$(null))})})})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})};module.exports=deleteHandler;
12
+ $callback$$(null))})})})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(deleteHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,2 +1,2 @@
1
1
  'use strict';const permission=require("../libs/permission"),deleteManyHandler=async($ctrl$$,$req$$,$mainCallback$$)=>{if(!$req$$.user.current_id_app)return $mainCallback$$("Kh\u00f4ng th\u1ec3 xo\u00e1 d\u1eef li\u1ec7u");permission.isAdmin($req$$.user.current_id_app,$req$$.user.email,async function($e_query$$,$admin$$){if(!$admin$$||$e_query$$)return $mainCallback$$("Kh\u00f4ng c\u00f3 quy\u1ec1n xo\u00e1 d\u1eef li\u1ec7u");$e_query$$=($req$$.body||{}).condition;if(!$e_query$$)return $mainCallback$$('B\u1ea1n c\u1ea7n cung c\u1ea5p \u0111i\u1ec1u ki\u1ec7n l\u1ecdc d\u1eef li\u1ec7u trong body c\u1ee7a request. V\u00ed d\u1ee5: {"condition":{"so_ct":"123"}}');
2
- $e_query$$.id_app=$req$$.user.current_id_app;try{const $rs$$=await $ctrl$$.model.deleteMany($e_query$$);$mainCallback$$(null,$rs$$)}catch($e$$){return $mainCallback$$($e$$)}})};module.exports=deleteManyHandler;
2
+ $e_query$$.id_app=$req$$.user.current_id_app;try{const $rs$$=await $ctrl$$.model.deleteMany($e_query$$);$mainCallback$$(null,$rs$$)}catch($e$$){return $mainCallback$$($e$$)}})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(deleteManyHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -15,4 +15,4 @@ var $dir_root_templates_id_file$$=configs.paths.templates||__dirname;let $templa
15
15
  ($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$templatePath$$=path.join($root$$,$file_name$$)}catch($e$$){return $callback$jscomp$0$$({error:$e$$.message||"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu"})}}else $templatePath$$=path.dirname($dir_root_templates_id_file$$)+$rs$$.file_mau_in;if(!$templatePath$$||!fs.existsSync($templatePath$$))return $callback$jscomp$0$$({error:"File m\u1eabu kh\u00f4ng t\u1ed3n t\u1ea1i"});let $ext$$=$templatePath$$.split(".").pop();
16
16
  "xlsx"===$ext$$?excelReport($templatePath$$,$data4export$$,function($e$$,$result$$){setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$});$req$$.data=$result$$;$req$$.ext="xlsx";$callback$jscomp$0$$(null)})},{timezone:configs.timezone||"Asia/Ho_Chi_Minh"}):($_data$jscomp$0$$=$data4export$$[0],$_data$jscomp$0$$.datasource={...$_data$jscomp$0$$},$_data$jscomp$0$$.company={...$_app$$},textReport($templatePath$$,$_data$jscomp$0$$,
17
17
  function($e$$,$result$$){setImmediate(()=>{if($e$$)return console.error("exportToExcel textreport",$e$$),$e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$});"docx"===$ext$$?($req$$.data=$result$$,$req$$.ext="docx"):($req$$.data=$result$$,$req$$.ext="text");$callback$jscomp$0$$(null)})}))}})})})})}).catch($error$$=>{console.error($error$$);return $callback$jscomp$0$$({error:"Kh\u00f4ng t\u1ed3n t\u1ea1i c\u00f4ng ty n\u00e0y"})})}).catch($e$$=>{console.error("exportToExcel find rpt",
18
- $e$$);return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})})}],$e$$=>{if($e$$)return $callback$jscomp$1$$($e$$);$callback$jscomp$1$$(null,{ext:$req$$.ext,data:$req$$.data})})};module.exports=exportHandler;
18
+ $e$$);return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})})}],$e$$=>{if($e$$)return $callback$jscomp$1$$($e$$);$callback$jscomp$1$$(null,{ext:$req$$.ext,data:$req$$.data})})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(exportHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,5 +1,5 @@
1
1
  'use strict';const fs=require("fs"),path=require("path"),async=require("async"),_=require("lodash"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),excelReport=require("excel-report"),redisCache=require("../libs/redis-cache"),{evalute,JSONParser}=require("../libs/utils"),permission=require("../libs/permission"),htmlReport=require("../libs/htmlReport"),utils=require("../libs/utils"),{ERRORS}=require("./controllerUtils"),
2
- find=($ctrl$$,$req$$,$callback$jscomp$1$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];async.series([function($callback$$){setImmediate(async()=>{var $body_query$$={};_.isObject($req$$.body)&&($body_query$$=$req$$.body);$body_query$$={...$req$$.query,...$body_query$$};$req$$.query=$body_query$$;if($body_query$$.sort)if("object"==typeof $body_query$$.sort)var $condition_sort$$=
2
+ findHanlder=($ctrl$$,$req$$,$callback$jscomp$1$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];async.series([function($callback$$){setImmediate(async()=>{var $body_query$$={};_.isObject($req$$.body)&&($body_query$$=$req$$.body);$body_query$$={...$req$$.query,...$body_query$$};$req$$.query=$body_query$$;if($body_query$$.sort)if("object"==typeof $body_query$$.sort)var $condition_sort$$=
3
3
  $body_query$$.sort;else try{$condition_sort$$=JSONParser($body_query$$.sort)}catch($e$$){return console.error("error parse json",$e$$,$body_query$$.sort),$callback$$({error:`Sort ${$body_query$$.sort} is not valid`})}!$condition_sort$$&&$ctrl$$.sort&&($condition_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$condition_sort$$;$req$$.fetch_by_groups=$body_query$$.fetch_by_groups;delete $body_query$$.fetch_by_groups;$condition_sort$$={};let $or$$=[];for(let $k$$ in $body_query$$)if("id_app"!==$k$$&&
4
4
  "access_token"!==$k$$)if("_id"===$k$$&&global.mongoose.Types.ObjectId.isValid($body_query$$._id))try{let $id$$=global.mongoose.Types.ObjectId($body_query$$._id);$or$$.push({_id:$id$$})}catch($error$$){console.error("find condition",$error$$)}else{if("q"===$k$$&&$body_query$$[$k$$])try{let $q$$=_.isObject($body_query$$[$k$$])?$body_query$$[$k$$]:JSONParser($body_query$$[$k$$]);$req$$.fetch_by_groups=$req$$.fetch_by_groups||$q$$.fetch_by_groups;delete $q$$.fetch_by_groups;if(Object.keys($q$$).includes("_id"))if(!$q$$._id)delete $q$$._id;
5
5
  else if("object"!==typeof $q$$._id&&!global.mongoose.Types.ObjectId.isValid($q$$._id))return console.error("Condition is not valid",$q$$),$callback$$({error:"Condition is not valid"});($condition_sort$$=$q$$)||($condition_sort$$={});continue}catch($e$$){return console.error("find condition",$e$$,$body_query$$[$k$$]),$callback$$({error:"Condition is not valid"})}if("fields"!==$k$$&&_.has($model$$.schema.paths,$k$$))if($ctrl$$.options.findExact[$k$$])$condition_sort$$[$k$$]=$body_query$$[$k$$];else{let $item$$=
@@ -52,4 +52,5 @@ $_rs_templatePath$$+"'"});$app_dir_root_template_e$$={};$rs$jscomp$0$$.e_view.fo
52
52
  })`;try{if(($app_dir_root_template_e$$=await evalute($_groupBy_excelTemplate_func_string$$,{data:$app_dir_root_template_e$$,moment,numeral,_,utils})())&&$app_dir_root_template_e$$.error)return console.error($app_dir_root_template_e$$.error,$_groupBy_excelTemplate_func_string$$),$callback$jscomp$0$$({error:$app_dir_root_template_e$$.error.message||$app_dir_root_template_e$$.error.error||$app_dir_root_template_e$$.error})}catch($e$$){return console.error($e$$,$_groupBy_excelTemplate_func_string$$),
53
53
  $callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$})}}excelReport($_rs_templatePath$$,$app_dir_root_template_e$$,function($e$$,$result$$){setImmediate(()=>{if($e$$)return console.error("excelReport",$e$$),$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$result$$;$req$$.dataType="xlsx";$callback$jscomp$0$$("0")})},{timezone:configs.timezone||"Asia/Ho_Chi_Minh"})}else $req$$.query.print&&$req$$.query.id_rpt&&global.mongoose.Types.ObjectId.isValid($req$$.query.id_rpt)?
54
54
  htmlReport($req$$.query.id_rpt,{...$req$$.user.current_app_info,...$req$$.query,company:{...$req$$.user.current_app_info},detail:$rs$jscomp$0$$.e_view,details:$rs$jscomp$0$$.e_view}).then($rs$$=>{$req$$.result=$rs$$;$callback$jscomp$0$$("0")},$e$$=>{console.error("htmlReport",$e$$);$callback$jscomp$0$$($e$$)}):($_rs_templatePath$$=$rs$jscomp$0$$.e_view,$req$$.query.groupBy?($_groupBy_excelTemplate_func_string$$=$req$$.query.groupBy.split(","),$_rs_templatePath$$.groupBy($_groupBy_excelTemplate_func_string$$,
55
- [],($e$$,$_items$$)=>{if($e$$)return console.error("jsonReport",$e$$),$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$_items$$;$callback$jscomp$0$$("0")})):($req$$.result=$_rs_templatePath$$,$callback$jscomp$0$$("0")))})})})})}})}],$e$$=>{if($e$$&&"0"!=$e$$)return $callback$jscomp$1$$($e$$);$callback$jscomp$1$$(null,{result:$req$$.result,dataType:$req$$.dataType||"json"})})};module.exports=find;
55
+ [],($e$$,$_items$$)=>{if($e$$)return console.error("jsonReport",$e$$),$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$_items$$;$callback$jscomp$0$$("0")})):($req$$.result=$_rs_templatePath$$,$callback$jscomp$0$$("0")))})})})})}})}],$e$$=>{if($e$$&&"0"!=$e$$)return $callback$jscomp$1$$($e$$);$callback$jscomp$1$$(null,{result:$req$$.result,dataType:$req$$.dataType||"json"})})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>
56
+ {handlerWithSesssion(findHanlder,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -10,4 +10,4 @@ $row_master$$[$column$$])||($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)
10
10
  $row_master$$[$detail_name$$].push($row_detail$$);$cb$$()})},()=>{$req$$.data=$data_new$$;setImmediate(()=>{$callback$$()})})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&0<$_first$$.length&&_.extend($row$$,$_first$$[0])}const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$,
11
11
  status_task:$req$$.status_task}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();if($e$$)return console.error("import",
12
12
  $e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);
13
- $mainCallback$$(null,$req$$.result)})};module.exports=importFromExcel;
13
+ $mainCallback$$(null,$req$$.result)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(importFromExcel,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -7,4 +7,4 @@ range:$range$$});if(0==$response$$.data.values.length)return $callback$$({error:
7
7
  $req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,
8
8
  id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$,status_task:$req$$.status_task}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$,
9
9
  finished_at:new Date};await $log$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");
10
- $callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
10
+ $callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(importFromGs,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -3,4 +3,5 @@ $callback$$()}catch($e$$){return console.error("importFromJson",$e$$),$callback$
3
3
  $e$$})}$callback$$()}else return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y d\u1eef li\u1ec7u c\u1ea7n import"})},function($callback$$){let $data$$=$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},
4
4
  function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $logData$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$,status_task:$req$$.status_task}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=
5
5
  $values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=
6
- $rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
6
+ $rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(importFromJSON,
7
+ $ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,4 +1,4 @@
1
1
  'use strict';const permission=require("../libs/permission"),createRouteHandler=async($ctrl$$,$req$$,$callback$$)=>{const {routeName:$routeName$$,route_action_key:$route_action_key$$,_options:$_options$$}=$req$$;let $notNeedRight$$=$_options$$.notNeedRight||await $ctrl$$.notNeedRight($req$$.user),$res_send$$=!1;if(!1===$ctrl$$.options.require_id_app)try{$ctrl$$[$route_action_key$$]($req$$,function($e$$,$rs$$){if($res_send$$)return console.error("no id_app route",$routeName$$,"sent header. calback had call");
2
2
  if($e$$){console.error("handle create route ",$routeName$$,$e$$);if($e$$.error)return $res_send$$=!0,$callback$$($e$$);$res_send$$=!0;return $callback$$({error:$e$$.message||$e$$})}$res_send$$=!0;return $callback$$(null,$rs$$)})}catch($e$$){return $res_send$$=!0,$callback$$({error:$e$$.message||$e$$})}else permission.hasRight($req$$.params.id_app,$req$$.user.email,$ctrl$$.module,"view",function($error$$,$hr$$){if($res_send$$)return console.error("route",$routeName$$,"sent header. hasRight had call");
3
3
  if($hr$$)try{$ctrl$$[$route_action_key$$]($req$$,function($e$$,$rs$$){if($res_send$$)return console.error("route",$routeName$$,"sent header. calback had call");if($e$$){console.error("handle create route ",$routeName$$,$e$$);if($e$$.error)return $res_send$$=!0,$callback$$($e$$);$res_send$$=!0;return $callback$$({error:$e$$.message||$e$$})}$res_send$$=!0;return $callback$$(null,$rs$$)})}catch($e$$){return $callback$$({error:$e$$.message||$e$$})}else $res_send$$=!0,$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},
4
- {notNeedRight:$notNeedRight$$})};module.exports=createRouteHandler;
4
+ {notNeedRight:$notNeedRight$$})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(createRouteHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -29,4 +29,4 @@ $id_rpt$$),$reject$$("Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu");$send_to$$=$req$$
29
29
  let $file_name$$=$_fileMauIn$$.file.name,$root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$templatePath$$=path.join($root$$,$file_name$$)}catch($e$$){return $reject$$($e$$.message||"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu")}}else $templatePath$$=path.dirname($dir_root_templates$$)+$r$$.file_mau_in;fs.existsSync($templatePath$$)||(console.log("file template not found",$templatePath$$),$templatePath$$=`${path.dirname($dir_root_templates$$)}/templates/excels/reports/${$module$$}.xlsx`);
30
30
  fs.existsSync($templatePath$$)||($templatePath$$=`${path.dirname(__dirname)}/templates/excels/reports/${$module$$}.xlsx`);if(!fs.existsSync($templatePath$$))return $reject$$("M\u1eabu kh\u00f4ng t\u1ed3n t\u1ea1i")}$rptConfig$$=$r$$;return $resolve$$($templatePath$$,$html_template$$)}).catch($error$$=>{console.error("Not found excel template",$error$$);return $reject$$($error$$)});else if($templatePath$$=`${path.dirname($dir_root_templates$$)}/templates/excels/reports/${$module$$}.xlsx`,fs.existsSync($templatePath$$)||
31
31
  ($templatePath$$=`${path.dirname(__dirname)}/templates/excels/reports/${$module$$}.xlsx`),!fs.existsSync($templatePath$$))return $reject$$("M\u1eabu excel kh\u00f4ng t\u1ed3n t\u1ea1i")})).then(async()=>{!1===$options$$.require_id_app?$streamData$$({}):permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",function($error$$,$hr$$,$app$$){$hr$$?$streamData$$({...$app$$}):$callback$jscomp$0$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xu\u1ea5t excel b\u00e1o c\u00e1o n\u00e0y"})},
32
- {notNeedRight:$notNeedRight$$})}).catch($e$$=>{console.error($e$$);return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})})}catch($e$$){return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})}};module.exports=rptExcelHandler;
32
+ {notNeedRight:$notNeedRight$$})}).catch($e$$=>{console.error($e$$);return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})})}catch($e$$){return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})}},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(rptExcelHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -9,4 +9,4 @@ $prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringif
9
9
  query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end()},1E3);break;default:console.log($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),0==$options$$.cache||$from_cache$$||setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,
10
10
  time:new Date,query:$_query$$}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),$query$$.group_by_summary.split(","))}catch($e$$){return console.error("report groupBy data",
11
11
  $e$$,$rptId$$,"..."),$e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})}}$callback$jscomp$0$$(null,$report$$)})})};!1===$options$$.require_id_app?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$jscomp$0$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?$callback$jscomp$0$$($e$$):
12
- $callback$jscomp$0$$({error:$e$$.message||$e$$})}};module.exports=rptHandler;
12
+ $callback$jscomp$0$$({error:$e$$.message||$e$$})}},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(rptHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -6,4 +6,5 @@ $k_ngay_ks_tu_ngay$$=new Date($k_ngay_ks_tu_ngay$$);if($k_ngay_ks_tu_ngay$$=awai
6
6
  $callback$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($req$$.user,$condition$jscomp$0$$,function($e$$,$condition$$){if($e$$)return console.error("postAgain dynamicFinding",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.condition=$condition$$;$callback$$()},{req:$req$$}):($req$$.condition=$condition$jscomp$0$$,$callback$$())})},{req:$req$$}):$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($req$$.user,$condition$$,
7
7
  function($e$$,$condition$$){if($e$$)return console.error("postAgain dynamicFinding",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.condition=$condition$$;$callback$$()},{req:$req$$}):($req$$.condition=$condition$$,$callback$$())})},function($callback$$){permission.isAdmin($req$$.user.current_id_app,$req$$.user.email,function($e$$,$admin$$){setImmediate(()=>{if($e$$)return $callback$$({error:$e$$.error||$e$$,code:$e$$.code});if(!$admin$$)return $callback$$({error:"B\u1ea1n ph\u1ea3i c\u00f3 quy\u1ec1n admin \u0111\u1ec3 th\u1ef1c hi\u1ec7n t\u00ednh n\u0103ng n\u00e0y"});
8
8
  $callback$$()})})},function($callback$$){const $condition$$=$req$$.condition;_.has($model$$.schema.paths,"ma_ct")&&$ctrl$$.options.isVoucher&&($condition$$.ma_ct=$ctrl$$.name.toUpperCase());let $data_log$$={...$req$$.query};delete $data_log$$.access_token;$req$$.user&&"log"!==$ctrl$$.name&&"labelinfo"!==$ctrl$$.name&&"listinfo"!==$ctrl$$.name&&"reportinfo"!==$ctrl$$.name&&"moduleinfo"!==$ctrl$$.name&&"options"!==$ctrl$$.name&&global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,
9
- action:"POSTAGAIN",data:{condition:JSON.stringify($data_log$$)}},$req$$.user.email,$req$$.user_agent,$req$$);$ctrl$$.postAgainHandler($req$$.user,$condition$$,($e$$,$rs$$)=>{if($e$$)return $callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$rs$$;$callback$$()},{req:$req$$})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=updateBookHanlder;
9
+ action:"POSTAGAIN",data:{condition:JSON.stringify($data_log$$)}},$req$$.user.email,$req$$.user_agent,$req$$);$ctrl$$.postAgainHandler($req$$.user,$condition$$,($e$$,$rs$$)=>{if($e$$)return $callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$rs$$;$callback$$()},{req:$req$$})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(updateBookHanlder,
10
+ $ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -9,4 +9,4 @@ data:{condition:JSON.stringify($condition$$)}},$req$$.user.email,$req$$.user_age
9
9
  $hau_to$$),$obj4view$$[$i$$][$field$$]=$gia_tri$$;async.map($obj4view$$,function($obj$$,$callback$$){setImmediate(()=>{delete $obj$$.__v;$model$$.updateOne({_id:$obj$$._id},$obj$$,function($e$jscomp$0$$){setImmediate(async()=>{if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);await $ctrl$$.cacheData($obj$$);$ctrl$$.post?postData($obj$$,$ctrl$$,function($e$$){if($e$$)return console.error("error post data",$e$$),$callback$$($e$$);$callback$$(null,$obj$$)},{req:$req$$}):$callback$$(null,$obj$$)})})})},
10
10
  function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$)return console.error("updateField",$e$jscomp$0$$),$e$jscomp$0$$.error?$callback$jscomp$0$$($e$jscomp$0$$):$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$});$ctrl$$.emit("saved",$rs$$);$ctrl$$.emit("updated",$rs$$);$rs$$=$rs$$.map($o$$=>{$o$$.toObject&&($o$$=convertObjectIdsToStrings($o$$.toObject()));return $o$$});$ctrl$$.onView($req$$.user,$rs$$,function($e$$,$viewValue$$){setImmediate(()=>{if($e$$)return console.error("updateField onview",
11
11
  $e$$),$e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$});$req$$&&$viewValue$$.forEach($r$$=>{pushNotification($ctrl$$,$r$$,"update",null,!0,{exclude_token:$req$$.query.access_token})});$req$$.result=$rs$$;$callback$jscomp$0$$()})},{req:$req$$})})})})}).catch($e$$=>{console.error("updateField query",$e$$);return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,
12
- $req$$.result)})};module.exports=updateFieldHanlder;
12
+ $req$$.result)})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(updateFieldHanlder,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,4 +1,4 @@
1
- 'use strict';const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),validator=require("../libs/validator"),{convertObjectIdsToStrings}=require("../libs/utils"),{ERRORS,isExists,createIdRef,checkReference,fields_sync_master_detail,postData,getNextSequence,runWebhooks,deletePost}=require("./controllerUtils"),update=async function($ctrl$$,
1
+ 'use strict';const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),validator=require("../libs/validator"),{convertObjectIdsToStrings}=require("../libs/utils"),{ERRORS,isExists,createIdRef,checkReference,fields_sync_master_detail,postData,getNextSequence,runWebhooks,deletePost}=require("./controllerUtils"),updateHandler=async function($ctrl$$,
2
2
  $req$$,$callback$jscomp$0$$){let {user:$user$$,id:$id$$,data:$data$$,action:$action$$,_action:$_action$$}=$req$$;$_action$$||($_action$$="update");delete $data$$.__v;try{const $model$$=$ctrl$$.model,$unique$$=$ctrl$$.unique,$module$$=$ctrl$$.module,$schema_paths$$=$model$$.schema.paths;$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $data$$.session_updated;delete $data$$.session_created;$req$$&&$schema_paths$$.session_updated&&($data$$.session_updated=
3
3
  ($req$$.cookies||{}).uid);const $obj$jscomp$1$$=await $model$$.findOne({_id:$id$$});if(!$obj$jscomp$1$$)return $callback$jscomp$0$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$data$$.listinfo_code=$obj$jscomp$1$$.toObject().listinfo_code||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.query=$req$$.query||{};const $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||$req$$.query["listinfo-code"]||$data$$.listinfo_code;let $voucher_options$$;$listinfo_code$$&&
4
4
  ($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$listinfo_code$$.toLowerCase()}).lean()||{}).option);$voucher_options$$||($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option);let $current_obj$$,$oldBooks$$;if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$data$$["g-recaptcha-response"])return $callback$jscomp$0$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");
@@ -37,4 +37,4 @@ $obj$jscomp$0$$.trang_thai&&setImmediate(async()=>{global.getModel("approve").fi
37
37
  $req$$.query.access_token);let $channel$$=`${$ctrl$$.name.toLowerCase()}-${"request_approved"}`;$obj$jscomp$0$$.id_app&&($channel$$=`${$channel$$}-${$obj$jscomp$0$$.id_app}`);let $message$$=JSON.stringify($obj$jscomp$0$$.toObject?$obj$jscomp$0$$.toObject():$obj$jscomp$0$$);try{await global.clientRedis.publish($channel$$,$message$$)}catch($e$$){console.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}}))}).catch($e$$=>{console.error($e$$)})});setImmediate(async()=>{(await permission.getFieldNotRight($obj$jscomp$0$$.id_app,
38
38
  $user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$jscomp$0$$[$f$$]});$obj$jscomp$0$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$$,$obj$jscomp$0$$,function($error$jscomp$0$$,$obj$$){$error$jscomp$0$$?(console.error("error when saved",$error$jscomp$0$$),$_callback$$($error$jscomp$0$$,void 0)):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$$)}):$_callback$$(null,$obj$$)},
39
39
  $current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$jscomp$0$$,function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$jscomp$0$$)}):$_callback$$(null,$obj$jscomp$0$$)})}],($e$$,$rs$$)=>{$e$$?(console.error($e$$),$callback$jscomp$0$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$jscomp$0$$(null,{new_obj:$rs$$,old_obj:$current_obj$$}))})}catch($e$$){console.error($e$$),
40
- $callback$jscomp$0$$($e$$)}};module.exports=update;
40
+ $callback$jscomp$0$$($e$$)}},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(updateHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -11,4 +11,5 @@ mongoose.models[$parent$$.model_code||$parent$$.api_code||$parent$$.code];let $f
11
11
  $_ref_model$jscomp$0$$.schema.paths[$field_of_parent$$.name].instance.toLowerCase();$key$jscomp$0$$=`${$field_of_parent$$.name}.${$subField$$.name}`;$data_type_key_value$$="array"==$data_type_key_value$$?`${$field_of_parent$$.name}.$.${$subField$$.name}`:$key$jscomp$0$$;try{let $rs$$=await $_ref_model$jscomp$0$$.updateMany({[$key$jscomp$0$$]:$old_value$$,id_app:$id_app$$},{[$data_type_key_value$$]:$new_value$$,...$user_update$$});console.log(`[updateKey] update cho ${$_ref_model$jscomp$0$$.modelName}:`,
12
12
  {[$key$jscomp$0$$]:$old_value$$,[$data_type_key_value$$]:$new_value$$},$rs$$)}catch($e$$){console.error(`[updateKey] update cho ${$_ref_model$jscomp$0$$.modelName}:${$key$jscomp$0$$}`,$e$$)}}}}}for(let $_ref_model$$ of Object.values(mongoose.models).filter($m$$=>$m$$.collection.name!=$model$$.collection.name))for(let $key$$ in $_ref_model$$.schema.paths){$data_type$jscomp$1_obj$$=$_ref_model$$.schema.paths[$key$$].instance.toLowerCase();if("array"==$data_type$jscomp$1_obj$$)try{await $_ref_model$$.updateMany({[`${$key$$}.${$field$$}`]:$old_value$$,
13
13
  id_app:$id_app$$},{[`${$key$$}.$.${$field$$}`]:$new_value$$,...$user_update$$})}catch($e$$){console.error("[updateKey] update gia tri moi cho subdocument",$key$$,"type",$data_type$jscomp$1_obj$$,"cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)}if("object"==$data_type$jscomp$1_obj$$||"mixed"==$data_type$jscomp$1_obj$$)try{await $_ref_model$$.updateMany({[`${$key$$}.${$field$$}`]:$old_value$$,id_app:$id_app$$},{[`${$key$$}.${$field$$}`]:$new_value$$,
14
- ...$user_update$$})}catch($e$$){console.error("[updateKey] update gia tri moi cho subdocument",$key$$,"type",$data_type$jscomp$1_obj$$,"cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)}}$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"})})})};module.exports=updateKeyHanlder;
14
+ ...$user_update$$})}catch($e$$){console.error("[updateKey] update gia tri moi cho subdocument",$key$$,"type",$data_type$jscomp$1_obj$$,"cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)}}$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"})})})},{handlerWithSesssion}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSesssion(updateKeyHanlder,
15
+ $ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,81 +1,4 @@
1
- // sessionContext.js
2
- const { AsyncLocalStorage } = require("node:async_hooks");
3
-
4
- const storage = new AsyncLocalStorage();
5
-
6
- /**
7
- * Danh sách các model KHÔNG bao giờ được gắn session
8
- * (ví dụ: các model ghi log, lịch sử, audit,...)
9
- */
10
- const SESSION_EXCLUDE_MODELS = ["log","token","otp","cache", "notification","approve","email",'tontucthoi','listinfo','reportinfo','labelinfo'];
11
-
12
- /**
13
- * Chạy một hàm trong context có session.
14
- * Mọi câu lệnh Mongoose trong hàm này sẽ được gắn cùng session đó.
15
- * @param {ClientSession} session - mongoose session
16
- * @param {Function} fn - async function cần chạy
17
- */
18
- exports.runWithSession = async function (session, fn) {
19
- return storage.run({ session }, fn);
20
- };
21
-
22
- /**
23
- * Thêm callback để chạy sau khi commit.
24
- * - Nếu không có session => chạy ngay lập tức.
25
- */
26
- exports.onAfterCommit = function (cb) {
27
- const store = storage.getStore();
28
- if (store && Array.isArray(store.afterCommit)) {
29
- store.afterCommit.push(cb);
30
- } else {
31
- // Không có session → chạy luôn
32
- Promise.resolve()
33
- .then(cb)
34
- .catch((err) => console.error("[onAfterCommit immediate error]", err));
35
- }
36
- };
37
-
38
- /**
39
- * Chạy một hàm mà KHÔNG gắn session (dù đang trong transaction).
40
- * Dùng cho các thao tác như ghi log, gửi email, lưu lịch sử...
41
- * @param {Function} fn - async function cần chạy
42
- */
43
- exports.runWithoutSession = async function (fn) {
44
- return storage.run({ session: undefined }, fn);
45
- };
46
-
47
- /**
48
- * Lấy session hiện tại trong context.
49
- * @returns {ClientSession|undefined}
50
- */
51
- exports.getCurrentSession = function () {
52
- const store = storage.getStore();
53
- return store ? store.session : undefined;
54
- };
55
-
56
- /**
57
- * Kiểm tra xem model có được loại trừ khỏi session tự động không.
58
- * @param {String|Model} model - model name hoặc đối tượng model
59
- * @returns {Boolean}
60
- */
61
- exports.isModelExcludedFromSession = function (model) {
62
- const name = typeof model === "string" ? model : model?.modelName;
63
- return !!(name && SESSION_EXCLUDE_MODELS.includes(name));
64
- };
65
-
66
- /**
67
- * Kiểm tra session còn hợp lệ (chưa commit hoặc abort)
68
- * @param {ClientSession} session
69
- * @returns {Boolean}
70
- */
71
- exports.isSessionActive = function (session) {
72
- if (!session) return false;
73
- try {
74
- // Một số driver Mongoose không expose state, nên ta kiểm tra gián tiếp:
75
- return session.inTransaction(); // true nếu đang trong transaction
76
- } catch {
77
- return false;
78
- }
79
- };
80
-
81
- console.log("[sessionContext] ✅ Loaded with model exclude & safety check");
1
+ 'use strict';const {AsyncLocalStorage}=require("node:async_hooks"),storage=new AsyncLocalStorage,SESSION_EXCLUDE_MODELS="log token otp cache notification approve email tontucthoi listinfo reportinfo labelinfo".split(" ");exports.runWithSession=async function($session$$,$fn$$){return storage.run({session:$session$$},$fn$$)};
2
+ exports.handlerWithSesssion=async function($handler$$,$ctrl$$,$req$$,$callback$$){const $session$$=await mongoose.startSession();try{await exports.runWithSession($session$$,async()=>{await $session$$.startTransaction();$handler$$($ctrl$$,$req$$,async($error$$,$result$$)=>{$error$$?(await $session$$.abortTransaction().catch(()=>{}),$callback$$($error$$)):(await $session$$.commitTransaction(),$callback$$(null,$result$$))})})}catch($e$$){await $session$$.abortTransaction().catch(()=>{}),await $session$$.endSession(),
3
+ $callback$$($e$$)}finally{await $session$$.endSession()}};exports.onAfterCommit=function($cb$$){const $store$$=storage.getStore();$store$$&&Array.isArray($store$$.afterCommit)?$store$$.afterCommit.push($cb$$):Promise.resolve().then($cb$$).catch($err$$=>console.error("[onAfterCommit immediate error]",$err$$))};exports.runWithoutSession=async function($fn$$){return storage.run({session:void 0},$fn$$)};
4
+ exports.getCurrentSession=function(){const $store$$=storage.getStore();return $store$$?$store$$.session:void 0};exports.isModelExcludedFromSession=function($model_name$$){$model_name$$="string"===typeof $model_name$$?$model_name$$:$model_name$$?.modelName;return!(!$model_name$$||!SESSION_EXCLUDE_MODELS.includes($model_name$$))};exports.isSessionActive=function($session$$){if(!$session$$)return!1;try{return $session$$.inTransaction()}catch{return!1}};console.log("[sessionContext] \u2705 Loaded with model exclude & safety check");
@@ -1,7 +1,6 @@
1
- 'use strict';const express=require("express"),app=express(),{parentPort,workerData}=require("worker_threads"),_=require("lodash"),Server=require("../app"),utils=require("../libs/utils"),handlers=require("../controllers/handlers"),{runWithSession}=require("../libs/sessionContext.js"),handleData=async $msg$$=>{try{let $ctrl$$=global.controllers[$msg$$.module.trim()];if($ctrl$$)if($msg$$.req&&$msg$$.req.handler){const $action$$=handlers[$msg$$.req.handler];if($action$$){const $session$$=await mongoose.startSession();
2
- try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();$action$$($ctrl$$,$msg$$.req,async($error$$,$result$$)=>{try{$result$$&&($result$$.toObject&&($result$$=utils.convertObjectIdsToStrings($result$$.toObject())),_.isArray($result$$)&&($result$$=$result$$.map($r$$=>$r$$.toObject?utils.convertObjectIdsToStrings($r$$.toObject()):$r$$)),$result$$=JSON.parse(JSON.stringify($result$$))),$error$$?await $session$$.abortTransaction().catch(()=>{}):await $session$$.commitTransaction(),
3
- parentPort.postMessage({error:$error$$,result:$result$$,id_task:$msg$$.id_task})}catch($e$$){await $session$$.abortTransaction().catch(()=>{}),console.error("[inputWorker] Error post mesage to parent processs",$e$$,$result$$),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}finally{await $session$$.endSession()}})})}catch($e$$){await $session$$.abortTransaction().catch(()=>{}),await $session$$.endSession(),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}}else console.error("[inputWorker] not found handler",
4
- $msg$$.req.handler,". C\u00e1c handler c\u00f3 gi\u00e1 tr\u1ecb:",Object.keys(handlers).join(",")),parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y handler: "+$msg$$.req.handler,id_task:$msg$$.id_task})}else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y req ho\u1eb7c t\u00ean handler",id_task:$msg$$.id_task});else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y module "+$msg$$.module,id_task:$msg$$.id_task})}catch($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})}},
5
- handleTask=$msg$$=>{if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}$msg$$=$msg$$||{};$msg$$.user=$msg$$.user||($msg$$.req||{}).user;if($msg$$.load||$msg$$.user&&$msg$$.module)if(sv)handleData($msg$$);else{if($msg$$.configs&&_.isString($msg$$.configs))try{$msg$$.configs=JSON.parse($msg$$.configs)}catch($e$$){delete $msg$$.configs,console.info($e$$)}const $configs$$=$msg$$.configs||require("../configs");$configs$$.use_ssl=
6
- !1;$configs$$.createIndexes=!1;$configs$$.port=1E4+$configs$$.port;Server(app,{configs:$configs$$,createServer:!1,start_report_pool:!1,start_import_data_pool:!1,start_abci_handler:!0,lite:!0},()=>{console.error("Input worker started:",$msg$$.id_worker);sv=!0;if($msg$$.load)return parentPort.postMessage({rs:"ready",id_task:$msg$$.id_task});handleData($msg$$)})}else parentPort.postMessage({error:"msg is not valid"})};let sv=!1;parentPort.on("message",$msg$$=>{handleTask($msg$$)});workerData&&(()=>{handleTask(workerData)})();
7
- setInterval(()=>{parentPort.postMessage("pong")},5E3);process.on("uncaughtException",$err$$=>{"EPIPE"===$err$$.code?console.error("Caught EPIPE error in inputworker:",$err$$.message):console.error("Uncaught exception in inputworker:",$err$$)});process.on("unhandledRejection",$reason$$=>{console.error("Unhandled promise rejection in inputworker:",$reason$$)});
1
+ 'use strict';const express=require("express"),app=express(),{parentPort,workerData}=require("worker_threads"),_=require("lodash"),Server=require("../app"),utils=require("../libs/utils"),handlers=require("../controllers/handlers"),handleData=async $msg$$=>{try{let $ctrl$$=global.controllers[$msg$$.module.trim()];if($ctrl$$)if($msg$$.req&&$msg$$.req.handler){const $action$$=handlers[$msg$$.req.handler];if($action$$)try{$action$$($ctrl$$,$msg$$.req,async($error$$,$result$$)=>{try{$result$$&&($result$$.toObject&&
2
+ ($result$$=utils.convertObjectIdsToStrings($result$$.toObject())),_.isArray($result$$)&&($result$$=$result$$.map($r$$=>$r$$.toObject?utils.convertObjectIdsToStrings($r$$.toObject()):$r$$)),$result$$=JSON.parse(JSON.stringify($result$$))),parentPort.postMessage({error:$error$$,result:$result$$,id_task:$msg$$.id_task})}catch($e$$){console.error("[inputWorker] Error post mesage to parent processs",$e$$,$result$$),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}})}catch($e$$){parentPort.postMessage({error:$e$$.message,
3
+ id_task:$msg$$.id_task})}else console.error("[inputWorker] not found handler",$msg$$.req.handler,". C\u00e1c handler c\u00f3 gi\u00e1 tr\u1ecb:",Object.keys(handlers).join(",")),parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y handler: "+$msg$$.req.handler,id_task:$msg$$.id_task})}else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y req ho\u1eb7c t\u00ean handler",id_task:$msg$$.id_task});else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y module "+$msg$$.module,
4
+ id_task:$msg$$.id_task})}catch($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})}},handleTask=$msg$$=>{if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}$msg$$=$msg$$||{};$msg$$.user=$msg$$.user||($msg$$.req||{}).user;if($msg$$.load||$msg$$.user&&$msg$$.module)if(sv)handleData($msg$$);else{if($msg$$.configs&&_.isString($msg$$.configs))try{$msg$$.configs=JSON.parse($msg$$.configs)}catch($e$$){delete $msg$$.configs,
5
+ console.info($e$$)}const $configs$$=$msg$$.configs||require("../configs");$configs$$.use_ssl=!1;$configs$$.createIndexes=!1;$configs$$.port=1E4+$configs$$.port;Server(app,{configs:$configs$$,createServer:!1,start_report_pool:!1,start_import_data_pool:!1,start_abci_handler:!0,lite:!0},()=>{console.error("Input worker started:",$msg$$.id_worker);sv=!0;if($msg$$.load)return parentPort.postMessage({rs:"ready",id_task:$msg$$.id_task});handleData($msg$$)})}else parentPort.postMessage({error:"msg is not valid"})};
6
+ let sv=!1;parentPort.on("message",$msg$$=>{handleTask($msg$$)});workerData&&(()=>{handleTask(workerData)})();setInterval(()=>{parentPort.postMessage("pong")},5E3);process.on("uncaughtException",$err$$=>{"EPIPE"===$err$$.code?console.error("Caught EPIPE error in inputworker:",$err$$.message):console.error("Uncaught exception in inputworker:",$err$$)});process.on("unhandledRejection",$reason$$=>{console.error("Unhandled promise rejection in inputworker:",$reason$$)});
@@ -1,8 +1,7 @@
1
- 'use strict';const express=require("express"),app=express(),{parentPort,workerData}=require("worker_threads"),_=require("lodash"),utils=require("../libs/utils"),Server=require("../app"),handlers=require("../controllers/handlers"),{runWithSession}=require("../libs/sessionContext.js"),handleReport=async $msg$$=>{if(!$msg$$.req||!$msg$$.req.handler)return parentPort.postMessage({error:"Thi\u1ebfu bi\u1ebfn req"});try{let $ctrl$$=global.report_controllers[$msg$$.module];if($ctrl$$)if($msg$$.req.handler){const $action$$=
2
- handlers[$msg$$.req.handler];if($action$$){const $session$$=await mongoose.startSession();try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();$action$$($ctrl$$,$msg$$.req,async($error$$,$result$$)=>{try{$result$$&&($result$$.toObject&&($result$$=utils.convertObjectIdsToStrings($result$$.toObject())),_.isArray($result$$)&&($result$$=$result$$.map($r$$=>$r$$.toObject?utils.convertObjectIdsToStrings($r$$.toObject()):$r$$)),$result$$=JSON.parse(JSON.stringify($result$$))),
3
- $error$$?await $session$$.abortTransaction().catch(()=>{}):await $session$$.commitTransaction(),parentPort.postMessage({error:$error$$,result:$result$$,id_task:$msg$$.id_task})}catch($e$$){await $session$$.abortTransaction().catch(()=>{}),console.error("[reportWorker] Error post mesage to parent report processs",{e:$e$$,result:$result$$,type:typeof $result$$}),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}finally{$session$$.endSession()}})})}catch($e$$){await $session$$.abortTransaction().catch(()=>
4
- {}),$session$$.endSession(),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}}else console.error("[reportWorker] not found handler",$msg$$.req.handler,". C\u00e1c handler c\u00f3 gi\u00e1 tr\u1ecb:",Object.keys(handlers).join(",")),parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y handler",id_task:$msg$$.id_task})}else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y t\u00ean handler",id_task:$msg$$.id_task});else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y module "+
5
- $msg$$.module,id_task:$msg$$.id_task})}catch($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})}};let sv=!1;
1
+ 'use strict';const express=require("express"),app=express(),{parentPort,workerData}=require("worker_threads"),_=require("lodash"),utils=require("../libs/utils"),Server=require("../app"),handlers=require("../controllers/handlers"),handleReport=async $msg$$=>{if(!$msg$$.req||!$msg$$.req.handler)return parentPort.postMessage({error:"Thi\u1ebfu bi\u1ebfn req"});try{let $ctrl$$=global.report_controllers[$msg$$.module];if($ctrl$$)if($msg$$.req.handler){const $action$$=handlers[$msg$$.req.handler];if($action$$)try{$action$$($ctrl$$,
2
+ $msg$$.req,async($error$$,$result$$)=>{try{$result$$&&($result$$.toObject&&($result$$=utils.convertObjectIdsToStrings($result$$.toObject())),_.isArray($result$$)&&($result$$=$result$$.map($r$$=>$r$$.toObject?utils.convertObjectIdsToStrings($r$$.toObject()):$r$$)),$result$$=JSON.parse(JSON.stringify($result$$))),parentPort.postMessage({error:$error$$,result:$result$$,id_task:$msg$$.id_task})}catch($e$$){console.error("[reportWorker] Error post mesage to parent report processs",{e:$e$$,result:$result$$,
3
+ type:typeof $result$$}),parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}})}catch($e$$){parentPort.postMessage({error:$e$$.message,id_task:$msg$$.id_task})}else console.error("[reportWorker] not found handler",$msg$$.req.handler,". C\u00e1c handler c\u00f3 gi\u00e1 tr\u1ecb:",Object.keys(handlers).join(",")),parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y handler",id_task:$msg$$.id_task})}else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y t\u00ean handler",
4
+ id_task:$msg$$.id_task});else parentPort.postMessage({error:"Kh\u00f4ng t\u00ecm th\u1ea5y module "+$msg$$.module,id_task:$msg$$.id_task})}catch($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})}};let sv=!1;
6
5
  const handleTask=$msg$$=>{if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}if(sv)handleReport($msg$$);else{if($msg$$.configs&&_.isString($msg$$.configs))try{$msg$$.configs=JSON.parse($msg$$.configs)}catch($e$$){delete $msg$$.configs,console.info($e$$)}const $configs$$=$msg$$.configs||require("../configs");$configs$$.use_ssl=!1;$configs$$.createIndexes=!1;$configs$$.port=1E4+$configs$$.port;Server(app,
7
6
  {configs:$configs$$,createServer:!1,start_import_data_pool:!1,lite:!0},()=>{sv=!0;console.error("Report worker started:",$msg$$.id_worker);if($msg$$.load)return parentPort.postMessage({rs:"ready",id_task:$msg$$.id_task});handleReport($msg$$)})}}else parentPort.postMessage({error:"msg is not valid"})};parentPort.on("message",$msg$$=>{handleTask($msg$$)});workerData&&(()=>{handleTask(workerData)})();setInterval(()=>{parentPort.postMessage("pong")},5E3);
8
7
  process.on("uncaughtException",$err$$=>{"EPIPE"===$err$$.code?console.error("Caught EPIPE error in reportworker:",$err$$.message):console.error("Uncaught exception in reportworker:",$err$$)});process.on("unhandledRejection",$reason$$=>{console.error("Unhandled promise rejection in reportworker:",$reason$$)});