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 +1 -1
- package/server/app.js +6 -6
- package/server/cluster.js +18 -18
- package/server/controllers/createHandler.js +2 -2
- package/server/controllers/createRouteHandler.js +1 -1
- package/server/controllers/deleteHandler.js +1 -1
- package/server/controllers/deleteManyHandler.js +1 -1
- package/server/controllers/exportHandler.js +1 -1
- package/server/controllers/findHandler.js +3 -2
- package/server/controllers/importFromExcelHandler.js +1 -1
- package/server/controllers/importFromGsHandler.js +1 -1
- package/server/controllers/importFromJsonHandler.js +2 -1
- package/server/controllers/rptCreateRouteHandler.js +1 -1
- package/server/controllers/rptExcelHandler.js +1 -1
- package/server/controllers/rptHandler.js +1 -1
- package/server/controllers/updateBookHandler.js +2 -1
- package/server/controllers/updateFieldHandler.js +1 -1
- package/server/controllers/updateHandler.js +2 -2
- package/server/controllers/updateKeyHandler.js +2 -1
- package/server/libs/sessionContext.js +4 -81
- package/server/workers/inputWorker.js +6 -7
- package/server/workers/reportWorker.js +4 -5
package/package.json
CHANGED
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"),
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
$
|
|
6
|
-
$
|
|
7
|
-
$
|
|
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"),
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
$
|
|
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
|
-
$
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
global.port)
|
|
19
|
-
|
|
20
|
-
|
|
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"),
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
-
|
|
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"})})}
|
|
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=
|
|
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=
|
|
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)})}
|
|
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=
|
|
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=
|
|
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=
|
|
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)})}
|
|
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=
|
|
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"),
|
|
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=
|
|
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"})})})}
|
|
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
|
-
|
|
2
|
-
const {
|
|
3
|
-
|
|
4
|
-
const storage =
|
|
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"),
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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"),
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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$$)});
|