flexbiz-server 12.3.39 → 12.3.40

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.
@@ -0,0 +1,96 @@
1
+ #!/bin/bash
2
+ # =============================================
3
+ # Script: enable_mongo_replica.sh (Phiên bản 2 - Đã sửa lỗi)
4
+ # Tác dụng: Bật replica set cho MongoDB local trên CentOS 7
5
+ # Cấp quyền thực thi: chmod +x enable_mongo_replica.sh
6
+ # chạy với quyền root: sudo ./enable_mongo_replica.sh
7
+ # Replica set name: rs0
8
+
9
+ #Nếu không khởi động được với replica thì chạy khối lệnh sau trong mongo shell
10
+ #rs.initiate({
11
+ # _id: "rs0",
12
+ # members: [
13
+ # { _id: 0, host: "localhost:27017" }
14
+ # ]
15
+ #})
16
+
17
+ # =============================================
18
+
19
+ set -e
20
+
21
+ REPL_NAME="rs0"
22
+ CONF_FILE="/etc/mongod.conf"
23
+ MONGO_PORT=27017
24
+
25
+ # Tự động phát hiện 'mongosh' (mới) hoặc 'mongo' (cũ)
26
+ MONGO_SHELL=$(command -v mongosh || command -v mongo)
27
+
28
+ echo "🚀 Bắt đầu bật replica set cho MongoDB..."
29
+
30
+ # 1. Kiểm tra mongod và mongo shell đã cài chưa
31
+ if ! command -v mongod &> /dev/null; then
32
+ echo "❌ MongoDB (mongod) chưa được cài. Hãy cài đặt."
33
+ exit 1
34
+ fi
35
+
36
+ if [ -z "$MONGO_SHELL" ]; then
37
+ echo "❌ Không tìm thấy 'mongosh' hay 'mongo'. Hãy cài đặt MongoDB shell."
38
+ exit 1
39
+ fi
40
+ echo " (Sử dụng shell: $MONGO_SHELL)"
41
+
42
+ # 2. Dừng dịch vụ mongod nếu đang chạy
43
+ echo "🛑 Dừng dịch vụ mongod..."
44
+ sudo systemctl stop mongod || true
45
+
46
+ # 3. Sao lưu file cấu hình
47
+ echo "⚙️ Sao lưu file cấu hình gốc sang ${CONF_FILE}.bak"
48
+ sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%Y%m%d%H%M%S)
49
+
50
+ # 4. [SỬA LỖI 1] Cập nhật bindIp
51
+ echo "⚙️ Cập nhật 'net.bindIp' thành '0.0.0.0' (Cho phép kết nối replica)"
52
+ if sudo grep -q "bindIp: 127.0.0.1" $CONF_FILE; then
53
+ sudo sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/g' $CONF_FILE
54
+ echo " -> Đã thay đổi bindIp từ 127.0.0.1 thành 0.0.0.0"
55
+ else
56
+ echo " -> Không tìm thấy 'bindIp: 127.0.0.1', giả sử đã cấu hình đúng."
57
+ fi
58
+
59
+ # 5. [SỬA LỖI 2] Cập nhật khối replication một cách an toàn
60
+ echo "⚙️ Cập nhật khối 'replication'..."
61
+ # Xóa bất kỳ khối 'replication:' cũ nào (từ dòng "replication:" đến dòng tiếp theo không thụt vào)
62
+ # để tránh xung đột hoặc trùng lặp.
63
+ sudo sed -i '/^replication:/,/^[^ ]/d' $CONF_FILE
64
+ echo " -> Đã xóa khối 'replication' cũ (nếu có)."
65
+
66
+ # Thêm khối 'replication:' mới, sạch vào cuối file
67
+ echo -e "\nreplication:\n replSetName: ${REPL_NAME}" | sudo tee -a $CONF_FILE > /dev/null
68
+ echo " -> Đã thêm khối 'replication: { replSetName: ${REPL_NAME} }' vào cuối file."
69
+
70
+ # 6. Khởi động lại MongoDB
71
+ echo "🔁 Khởi động lại dịch vụ mongod..."
72
+ # Tải lại cấu hình systemd phòng trường hợp nó bị ghi đè
73
+ sudo systemctl daemon-reload
74
+ sudo systemctl start mongod
75
+ sudo systemctl enable mongod
76
+
77
+ # 7. Chờ vài giây để MongoDB khởi động
78
+ echo "⏳ Chờ 30 giây để MongoDB khởi động..."
79
+ sleep 30
80
+
81
+ # 8. [SỬA LỖI 3] Khởi tạo replica set
82
+ echo "🧠 Khởi tạo replica set (${REPL_NAME})..."
83
+ # Chỉ định rõ ràng host là 127.0.0.1 để tránh lỗi phân giải 'hostname'
84
+ INIT_JS="rs.initiate({ _id: '${REPL_NAME}', members: [ { _id: 0, host: '127.0.0.1:${MONGO_PORT}' } ] })"
85
+
86
+ # Chạy lệnh: Thử rs.status(), nếu lỗi (nghĩa là chưa init) thì chạy INIT_JS
87
+ $MONGO_SHELL --port $MONGO_PORT --eval "try { rs.status() } catch (e) { ${INIT_JS} }"
88
+
89
+ # 9. Kiểm tra lại trạng thái
90
+ echo "🔍 Kiểm tra trạng thái replica set..."
91
+ $MONGO_SHELL --port $MONGO_PORT --eval "rs.status()" | grep -E "name|stateStr|optime"
92
+
93
+ echo ""
94
+ echo "✅ Replica set '${REPL_NAME}' đã được bật thành công!"
95
+ echo "👉 Bây giờ bạn có thể kết nối từ Mongoose bằng URI:"
96
+ echo " mongodb://127.0.0.1:${MONGO_PORT}/mydb?replicaSet=${REPL_NAME}"
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.39",
5
+ "version": "12.3.40",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
package/server/app.js CHANGED
@@ -1,21 +1,21 @@
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"),cors=require("cors"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs,lite:$options$$.lite},$User$$=global.getModel("user");
3
- $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$$;global.port=$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$;
4
- 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."})):$next$$()});$_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
5
- 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$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+
6
- 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$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=
7
- $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$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_port_compress_cookieParser_morgan_multer_root_dir_uploads_session$$);
8
- $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||__dirname+"/templates")),$app$$.use("/images",express.static($configs$$.paths.images||__dirname+
9
- "/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+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=
10
- $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!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async()=>{console.log("[app] Connected to Database");
11
- const $redis$$=require("redis"),{retryStrategyRedis:$retryStrategyRedis$$}=require("./libs/utils");global.clientRedis=$redis$$.createClient({host:"127.0.0.1",port:6379,retry_strategy:$retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>console.error("Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("[app] Redis connection closed.")});global.clientRedis.on("connect",function(){console.log("[app] redis connected");$User$$.initClientSockets();0!=$options$$.createRedisCache&&
12
- require("./libs/redis-cache").set();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool$jscomp$0$$=require("sticky-session");$configs$$.use_ssl?($cpus_report_cpus_server_sslConfig$$=require("./sslConfig"),$cpus_report_cpus_server_sslConfig$$=https.createServer($cpus_report_cpus_server_sslConfig$$($options$$.sslDir),$app$$)):$cpus_report_cpus_server_sslConfig$$=http.createServer($app$$);
13
- $cpus_report_cpus_server_sslConfig$$.timeout=6E5;!1!==$options$$.useSocket&&$User$$.initSocket($cpus_report_cpus_server_sslConfig$$);if(!1!==$options$$.cluster){if(!$StaticPool$jscomp$0$$.listen($cpus_report_cpus_server_sslConfig$$,global.port))$cpus_report_cpus_server_sslConfig$$.once("listening",function(){console.log("[app] server started on",global.port)});$StaticPool$jscomp$0$$=require("cluster");$StaticPool$jscomp$0$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("[app] worker "+
14
- $worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool$jscomp$0$$.on("online",function($worker$$){console.info("[app] worker "+$worker$$.process.pid+" is online")})}else $cpus_report_cpus_server_sslConfig$$.listen(global.port,()=>{console.log("[app] server start at "+global.port+" port")})}var $cpus_report_cpus_server_sslConfig$$=os.cpus().length;$StaticPool$jscomp$0$$=$options$$.import_cpus||($options$$.start_import_data_pool?$options$$.start_report_pool||$options$$.start_input_data_pool?
15
- 1:Math.round($cpus_report_cpus_server_sslConfig$$/2):0);var $StaticPool$jscomp$1$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_report_cpus_server_sslConfig$$/2),2):0);$cpus_report_cpus_server_sslConfig$$=$options$$.report_cpus||($options$$.start_import_data_pool?Math.max(Math.min($cpus_report_cpus_server_sslConfig$$-$StaticPool$jscomp$1$$-$StaticPool$jscomp$0$$,Math.round($cpus_report_cpus_server_sslConfig$$/2))-1,2):0);if($StaticPool$jscomp$1$$){const $StaticPool$$=
16
- require("./libs/WorkerStaticPool");global.inputMainPool=new $StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$1$$,3E5,$StaticPool$jscomp$1$$,"input pool");global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[app] Crud pool ready")})}$StaticPool$jscomp$0$$&&($StaticPool$jscomp$1$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool$jscomp$1$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||
17
- 0,$StaticPool$jscomp$0$$,36E5,1,"import pool"),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[app] Import pool ready")}));$cpus_report_cpus_server_sslConfig$$&&($StaticPool$jscomp$0$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool$jscomp$0$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,$cpus_report_cpus_server_sslConfig$$,3E5,2,"report pool"),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},
18
- ()=>{console.log("[app] Report pool ready")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>{console.log("[app] Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
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},$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$$()});$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$$());$_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
+ 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
+ __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
+ "/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!")});global.mongoose.connect($configs$$.database.url,
11
+ {useNewUrlParser:!0}).then(async()=>{console.log("[app] Connected to Database");const $redis$$=require("redis"),{retryStrategyRedis:$retryStrategyRedis$$}=require("./libs/utils");global.clientRedis=$redis$$.createClient({host:"127.0.0.1",port:6379,retry_strategy:$retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>console.error("Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("[app] Redis connection closed.")});global.clientRedis.on("connect",function(){console.log("[app] redis connected");
12
+ $User$$.initClientSockets();0!=$options$$.createRedisCache&&require("./libs/redis-cache").set();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool$jscomp$0$$=require("sticky-session");$configs$$.use_ssl?($cpus_report_cpus_server_sslConfig$$=require("./sslConfig"),$cpus_report_cpus_server_sslConfig$$=https.createServer($cpus_report_cpus_server_sslConfig$$($options$$.sslDir),$app$$)):
13
+ $cpus_report_cpus_server_sslConfig$$=http.createServer($app$$);$cpus_report_cpus_server_sslConfig$$.timeout=6E5;!1!==$options$$.useSocket&&$User$$.initSocket($cpus_report_cpus_server_sslConfig$$);if(!1!==$options$$.cluster){if(!$StaticPool$jscomp$0$$.listen($cpus_report_cpus_server_sslConfig$$,global.port))$cpus_report_cpus_server_sslConfig$$.once("listening",function(){console.log("[app] server started on",global.port)});$StaticPool$jscomp$0$$=require("cluster");$StaticPool$jscomp$0$$.on("exit",
14
+ function($worker$$,$code$$,$signal$$){console.error("[app] worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool$jscomp$0$$.on("online",function($worker$$){console.info("[app] worker "+$worker$$.process.pid+" is online")})}else $cpus_report_cpus_server_sslConfig$$.listen(global.port,()=>{console.log("[app] server start at "+global.port+" port")})}var $cpus_report_cpus_server_sslConfig$$=os.cpus().length;$StaticPool$jscomp$0$$=$options$$.import_cpus||($options$$.start_import_data_pool?
15
+ $options$$.start_report_pool||$options$$.start_input_data_pool?1:Math.round($cpus_report_cpus_server_sslConfig$$/2):0);var $StaticPool$jscomp$1$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_report_cpus_server_sslConfig$$/2),2):0);$cpus_report_cpus_server_sslConfig$$=$options$$.report_cpus||($options$$.start_import_data_pool?Math.max(Math.min($cpus_report_cpus_server_sslConfig$$-$StaticPool$jscomp$1$$-$StaticPool$jscomp$0$$,Math.round($cpus_report_cpus_server_sslConfig$$/
16
+ 2))-1,2):0);if($StaticPool$jscomp$1$$){const $StaticPool$$=require("./libs/WorkerStaticPool");global.inputMainPool=new $StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$1$$,3E5,$StaticPool$jscomp$1$$,"input pool");global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[app] Crud pool ready")})}$StaticPool$jscomp$0$$&&($StaticPool$jscomp$1$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool$jscomp$1$$(__dirname+
17
+ "/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$0$$,36E5,1,"import pool"),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.log("[app] Import pool ready")}));$cpus_report_cpus_server_sslConfig$$&&($StaticPool$jscomp$0$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool$jscomp$0$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,$cpus_report_cpus_server_sslConfig$$,3E5,2,"report pool"),global.reportMainPool.exec({load:!0,
18
+ configs:JSON.stringify($configs$$)},()=>{console.log("[app] Report pool ready")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>{console.log("[app] Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
19
19
  process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
20
20
  Error: ${$err$jscomp$3_error$$.message}
21
21
  Stack: ${$err$jscomp$3_error$$.stack}
package/server/cluster.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"),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$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");$configs$$.port=$_port_accessLogStream_rfs$$;
4
- 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),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});
5
- $_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$$());$app$$.use(function($req$$,$res$$,
6
- $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$$());$_configs_compress_cookieParser_cors_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$$()});$_configs_compress_cookieParser_cors_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_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"),{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$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token=
4
+ "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),$res$$.status(503).send({error:"Server is busy right now, sorry."})):
5
+ $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$$());$app$$.use(function($req$$,
6
+ $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$$());$app$$.use(transactionMiddleware());
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
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
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
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}}));
@@ -13,29 +13,28 @@ const getData=($id_app$$,$collection$$,$field$$,$condition$$)=>{if("token"===$co
13
13
  sip_uri:0,sip_password:0,sip_websocket:0,voiip_access_token:0,voiip_webhook:0,wallet_address:0,wallet_token:0,owner:0,default_password:0,email_host:0,email_port:0,email_secure:0,email_authMethod:0,email_user:0,email_pass:0,email_name:0,exfields:0,ssl_key:0,ssl_cert:0,ssl_ca:0});return $col$$.findOne($condition$$,$fields$$).lean()}throw`Error get data: Collection ${$collection$$} is not exists`;},isExists=function($model$$,$unique$$,$obj$$,$replaceIfExists$$,$fn$$){if(!$unique$$||0===$unique$$.length)return $fn$$(null,
14
14
  !1);let $condition$$={};$unique$$=$unique$$.filter($key$$=>$model$$.schema.paths[$key$$]);for(let $i$$=0;$i$$<$unique$$.length;$i$$++){let $key$$=$unique$$[$i$$],$v$$=$obj$$[$key$$];void 0!=$v$$&&$model$$.schema.paths[$key$$]&&(null!==$v$$?"number"==$model$$.schema.paths[$key$$].instance.toLowerCase()?$condition$$[$key$$]=Number($v$$):"date"==$model$$.schema.paths[$key$$].instance.toLowerCase()?$condition$$[$key$$]=new Date($v$$):"string"==$model$$.schema.paths[$key$$].instance.toLowerCase()?$condition$$[$key$$]=
15
15
  $v$$.toString():$condition$$[$key$$]=$v$$:$condition$$[$key$$]=$v$$)}if($condition$$.id_app&&2>Object.values($condition$$).length||1>Object.values($condition$$).length)return $fn$$("D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb: "+$unique$$.join(","));$obj$$.id_app&&($condition$$.id_app=$obj$$.id_app);$replaceIfExists$$?$model$$.deleteMany($condition$$,$e$$=>{setImmediate(()=>{if($e$$)return $fn$$($e$$);$fn$$(null,!1)})}):$model$$.findOne($condition$$,{_id:1},
16
- ($error$$,$result$$)=>{setImmediate(()=>{if($error$$)return $fn$$($error$$);if(!$result$$)return $fn$$(null,!1);console.warn("object exists",$condition$$,"unique fields",$unique$$);$fn$$(null,!0)})})},postData=function($obj$$,$ctrl$$,$mainCallback$$,$options$$={}){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return console.log("[controllerUtils][postData] ch\u1ee9c n\u0103ng n\u00e0y kh\u00f4ng c\u00f3 h\u00e0m post d\u1eef li\u1ec7u",$ctrl$$.name),$mainCallback$$();const $postOptions$$=
17
- {...$ctrl$$.options,...$options$$};let $obj_created$$=$obj$$.toObject?utils.convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))});console.log("[controllerUtils][postData] chu\u1ea9n b\u1ecb post d\u1eef li\u1ec7u...",
18
- $ctrl$$.name,$obj_created$$.so_ct,$obj_created$$.trang_thai,$obj_created$$.listinfo_code);$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$jscomp$2$$){if($e$jscomp$2$$)return $mainCallback$$($e$jscomp$2$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$1$$,$_obj$$,$oldBooks$$){if($e$jscomp$1$$)return $mainCallback$$($e$jscomp$1$$);let $oldDanamicBook$$={};const $callback$$=
19
- async($e$$,$rs$$)=>{if($e$$){for(let $key$$ in $oldBooks$$)0<$oldBooks$$[$key$$].length&&await global.getModel($key$$.toLowerCase()).insertMany($oldBooks$$[$key$$]);if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)!$oldBooks$$[$key$$]&&0<$oldDanamicBook$$[$key$$].length&&await global.getModel($key$$.toLowerCase()).insertMany($oldDanamicBook$$[$key$$])}$mainCallback$$($e$$,$rs$$)};if($ctrl$$.dynamicDeletePost)try{$oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$$($e$$.message||
20
- $e$$.error||$e$$)}setImmediate(async()=>{if($obj_created$$.trang_thai||0==$obj_created$$.trang_thai)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();const $listinfo_code$$=$obj_created$$.listinfo_code;let $trang_thai$$;$listinfo_code$$&&($trang_thai$$=await trangthai.findOne({ma_ct:($listinfo_code$$||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai}));$trang_thai$$||($trang_thai$$=await trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai}));
21
- if(!$trang_thai$$||!$trang_thai$$.post)return console.log("[controllerUtils][postData] tr\u1ea1ng th\u00e1i kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c kh\u00f4ng y\u00eau c\u1ea7u post d\u1eef li\u1ec7u",$trang_thai$$.ma_trang_thai),$callback$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$){let $msg_error$$=$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$.toString();if(0<=$msg_error$$.indexOf("E11000 duplicate")&&(0<=$msg_error$$.indexOf("id_ct_1_nh_dk_1")||
22
- 0<=$msg_error$$.indexOf("id_ct_1_line_1")))return $callback$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$$($e_delete_post$$);console.error("deleted books because error post");if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$),$callback$$($e$jscomp$0$$.message||
23
- $e$jscomp$0$$.error||$e$jscomp$0$$)}catch($e$$){return console.error("[dynamicDeletePost]",$e$$.message||$e$$.error||$e$$),$callback$$($e$$)}else $callback$$($e$jscomp$0$$)})}else $callback$$(null,$rs$$)})},{...$postOptions$$})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{let $obj$jscomp$0$$;$obj$jscomp$0$$=$_obj$$.toObject?utils.convertObjectIdsToStrings($_obj$$.toObject()):{...$_obj$$};$obj$jscomp$0$$._id&&($obj$jscomp$0$$._id=
24
- $obj$jscomp$0$$._id.toString());setImmediate(async()=>{var $channel_id_func_old_trang_thai$$=`${$ctrl$$.name.toLowerCase()}-${$eventName$$}`;$_obj$$.id_app&&($channel_id_func_old_trang_thai$$=`${$channel_id_func_old_trang_thai$$}-${$_obj$$.id_app}`);let $message$$=JSON.stringify($obj$jscomp$0$$);try{await global.clientRedis.publish($channel_id_func_old_trang_thai$$,$message$$)}catch($e$$){console.error("[controllerUtiles][pushNotification] fire event",$eventName$$,$e$$)}if($_obj$$.status){$options$$||
25
- ($options$$={});var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($channel_id_func_old_trang_thai$$=($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString(),$channel_id_func_old_trang_thai$$===$trang_thai$$&&($justFireEvents$$=!0));var $listinfos_notifications_setting_users_receive_notification_v_options$$;($channel_id_func_old_trang_thai$$=
26
- $obj$jscomp$0$$.listinfo_code)&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$jscomp$0$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$channel_id_func_old_trang_thai$$&&0!=$listinfos_notifications_setting_users_receive_notification_v_options$$.length||($listinfos_notifications_setting_users_receive_notification_v_options$$=(await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=>
27
- $a$$.code),$listinfos_notifications_setting_users_receive_notification_v_options$$.push($ctrl$$.name),$listinfos_notifications_setting_users_receive_notification_v_options$$=[...(new Set($listinfos_notifications_setting_users_receive_notification_v_options$$))],$channel_id_func_old_trang_thai$$={$in:$listinfos_notifications_setting_users_receive_notification_v_options$$},$listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$jscomp$0$$.id_app,
28
- id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>$v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);0===$listinfos_notifications_setting_users_receive_notification_v_options$$.length&&($listinfos_notifications_setting_users_receive_notification_v_options$$=
29
- await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$listinfos_notifications_setting_users_receive_notification_v_options$$&&($listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||
30
- "delete"===$u$$.trang_thai.toString()),$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;$func_string_n$$=$func_string_n$$.condition;0>$func_string_n$$.indexOf("return ")&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error("[controllerUtiles][pushNotification]",
31
- $e$$,$func_string_n$$),!1}}),$listinfos_notifications_setting_users_receive_notification_v_options$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$jscomp$0$$.just_fire_events&&($_justFireEvents$$=$p$jscomp$0$$.just_fire_events);let $notificationData$$={_id:$obj$jscomp$0$$._id,trang_thai:$trang_thai$$,id_app:$obj$jscomp$0$$.id_app,code:$obj$jscomp$0$$.ma_ct||$ctrl$$.name,id_link:$obj$jscomp$0$$.id_link||$obj$jscomp$0$$.id_product,code_link:$obj$jscomp$0$$.code_link||
32
- $obj$jscomp$0$$.colection_name_product,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$jscomp$0$$.not_send_email,justFireEvents:$_justFireEvents$$};if($justFireEvents$$||"delete"===$eventName$$.toLowerCase())$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):""}catch($e$$){$notificationData$$.body=$p$jscomp$0$$.body,console.error("[controllerUtiles][pushNotification]",
33
- $ctrl$$.name,"compileHtml body",$e$$,$obj$jscomp$0$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$))}catch($e$$){$notificationData$$.title=$options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml title",$e$$,$obj$jscomp$0$$)}}if($p$jscomp$0$$.email_content)try{$notificationData$$.email_content=compileHtml($p$jscomp$0$$.email_content,
34
- $obj$jscomp$0$$)}catch($e$$){$notificationData$$.email_content=$p$jscomp$0$$.email_content,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml email_content",$e$$,$obj$jscomp$0$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);$options$$.users_will_receive&&0<$options$$.users_will_receive.length&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));
35
- $p$jscomp$0$$.send_phu_trach&&$obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));if($p$jscomp$0$$.send_admin){var $admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$jscomp$0$$.send_attends&&$obj$jscomp$0$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$jscomp$0$$.attends));
36
- $p$jscomp$0$$.group_id&&($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:$p$jscomp$0$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$jscomp$0$$.id_app,{$or:[{ma_kh:$obj$jscomp$0$$.ma_kh},{_id:$obj$jscomp$0$$.id_kh}]},"of_user"))&&
37
- ($users_will_receive$$=$users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$jscomp$0$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.user_created]):!1===$p$jscomp$0$$.send_to_user_created&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$jscomp$0$$.handle_receivers;
38
- if(0>$str_func$$.indexOf("async ")){0>$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{
16
+ ($error$$,$result$$)=>{setImmediate(()=>{if($error$$)return $fn$$($error$$);if(!$result$$)return $fn$$(null,!1);console.warn("object exists",$condition$$,"unique fields",$unique$$);$fn$$(null,!0)})})},postData=function($obj$$,$ctrl$$,$mainCallback$$,$options$$={}){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $mainCallback$$();const $postOptions$$={...$ctrl$$.options,...$options$$};let $obj_created$$=$obj$$.toObject?utils.convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};
17
+ Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))});console.log("[controllerUtils][postData] chu\u1ea9n b\u1ecb post d\u1eef li\u1ec7u...",$ctrl$$.name,$obj_created$$.so_ct,$obj_created$$.trang_thai,$obj_created$$.listinfo_code);$ctrl$$.beforePost||
18
+ ($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$jscomp$2$$){if($e$jscomp$2$$)return $mainCallback$$($e$jscomp$2$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$1$$,$_obj$$,$oldBooks$$){if($e$jscomp$1$$)return $mainCallback$$($e$jscomp$1$$);let $oldDanamicBook$$={};const $callback$$=async($e$$,$rs$$)=>{if($e$$){for(let $key$$ in $oldBooks$$)0<$oldBooks$$[$key$$].length&&await global.getModel($key$$.toLowerCase()).insertMany($oldBooks$$[$key$$]);
19
+ if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)!$oldBooks$$[$key$$]&&0<$oldDanamicBook$$[$key$$].length&&await global.getModel($key$$.toLowerCase()).insertMany($oldDanamicBook$$[$key$$])}$mainCallback$$($e$$,$rs$$)};if($ctrl$$.dynamicDeletePost)try{$oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}setImmediate(async()=>{if($obj_created$$.trang_thai||0==$obj_created$$.trang_thai)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();
20
+ const $listinfo_code$$=$obj_created$$.listinfo_code;let $trang_thai$$;if($obj_created$$.trang_thai&&($listinfo_code$$&&($trang_thai$$=await trangthai.findOne({ma_ct:($listinfo_code$$||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai})),$trang_thai$$||($trang_thai$$=await trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai})),!$trang_thai$$||!$trang_thai$$.post))return console.log("[controllerUtils][postData] tr\u1ea1ng th\u00e1i kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c kh\u00f4ng y\u00eau c\u1ea7u post d\u1eef li\u1ec7u",
21
+ $listinfo_code$$,$obj_created$$.trang_thai),$callback$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$){let $msg_error$$=$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$.toString();if(0<=$msg_error$$.indexOf("E11000 duplicate")&&(0<=$msg_error$$.indexOf("id_ct_1_nh_dk_1")||0<=$msg_error$$.indexOf("id_ct_1_line_1")))return $callback$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,
22
+ $obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$$($e_delete_post$$);console.error("deleted books because error post");if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$),$callback$$($e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$)}catch($e$$){return console.error("[dynamicDeletePost]",$e$$.message||$e$$.error||$e$$),$callback$$($e$$)}else $callback$$($e$jscomp$0$$)})}else $callback$$(null,
23
+ $rs$$)})},{...$postOptions$$})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{let $obj$jscomp$0$$;$obj$jscomp$0$$=$_obj$$.toObject?utils.convertObjectIdsToStrings($_obj$$.toObject()):{...$_obj$$};$obj$jscomp$0$$._id&&($obj$jscomp$0$$._id=$obj$jscomp$0$$._id.toString());setImmediate(async()=>{var $channel_id_func_old_trang_thai$$=`${$ctrl$$.name.toLowerCase()}-${$eventName$$}`;$_obj$$.id_app&&($channel_id_func_old_trang_thai$$=
24
+ `${$channel_id_func_old_trang_thai$$}-${$_obj$$.id_app}`);let $message$$=JSON.stringify($obj$jscomp$0$$);try{await global.clientRedis.publish($channel_id_func_old_trang_thai$$,$message$$)}catch($e$$){console.error("[controllerUtiles][pushNotification] fire event",$eventName$$,$e$$)}if($_obj$$.status){$options$$||($options$$={});var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();$old_obj$$&&
25
+ !$justFireEvents$$&&($channel_id_func_old_trang_thai$$=($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString(),$channel_id_func_old_trang_thai$$===$trang_thai$$&&($justFireEvents$$=!0));var $listinfos_notifications_setting_users_receive_notification_v_options$$;($channel_id_func_old_trang_thai$$=$obj$jscomp$0$$.listinfo_code)&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$jscomp$0$$.id_app,id_func:$channel_id_func_old_trang_thai$$,
26
+ option:{$exists:!0}},{option:1}).lean());$channel_id_func_old_trang_thai$$&&0!=$listinfos_notifications_setting_users_receive_notification_v_options$$.length||($listinfos_notifications_setting_users_receive_notification_v_options$$=(await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=>$a$$.code),$listinfos_notifications_setting_users_receive_notification_v_options$$.push($ctrl$$.name),$listinfos_notifications_setting_users_receive_notification_v_options$$=[...(new Set($listinfos_notifications_setting_users_receive_notification_v_options$$))],
27
+ $channel_id_func_old_trang_thai$$={$in:$listinfos_notifications_setting_users_receive_notification_v_options$$},$listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$jscomp$0$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>
28
+ $v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);0===$listinfos_notifications_setting_users_receive_notification_v_options$$.length&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$listinfos_notifications_setting_users_receive_notification_v_options$$&&
29
+ ($listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||"delete"===$u$$.trang_thai.toString()),$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;
30
+ $func_string_n$$=$func_string_n$$.condition;0>$func_string_n$$.indexOf("return ")&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error("[controllerUtiles][pushNotification]",$e$$,$func_string_n$$),!1}}),$listinfos_notifications_setting_users_receive_notification_v_options$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$jscomp$0$$.just_fire_events&&
31
+ ($_justFireEvents$$=$p$jscomp$0$$.just_fire_events);let $notificationData$$={_id:$obj$jscomp$0$$._id,trang_thai:$trang_thai$$,id_app:$obj$jscomp$0$$.id_app,code:$obj$jscomp$0$$.ma_ct||$ctrl$$.name,id_link:$obj$jscomp$0$$.id_link||$obj$jscomp$0$$.id_product,code_link:$obj$jscomp$0$$.code_link||$obj$jscomp$0$$.colection_name_product,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$jscomp$0$$.not_send_email,justFireEvents:$_justFireEvents$$};
32
+ if($justFireEvents$$||"delete"===$eventName$$.toLowerCase())$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):""}catch($e$$){$notificationData$$.body=$p$jscomp$0$$.body,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml body",$e$$,$obj$jscomp$0$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||
33
+ "",$obj$jscomp$0$$))}catch($e$$){$notificationData$$.title=$options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml title",$e$$,$obj$jscomp$0$$)}}if($p$jscomp$0$$.email_content)try{$notificationData$$.email_content=compileHtml($p$jscomp$0$$.email_content,$obj$jscomp$0$$)}catch($e$$){$notificationData$$.email_content=$p$jscomp$0$$.email_content,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml email_content",
34
+ $e$$,$obj$jscomp$0$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);$options$$.users_will_receive&&0<$options$$.users_will_receive.length&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));$p$jscomp$0$$.send_phu_trach&&$obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));if($p$jscomp$0$$.send_admin){var $admins_of_user_sandbox_us$$=
35
+ (await Participant.find({id_app:$obj$jscomp$0$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$jscomp$0$$.send_attends&&$obj$jscomp$0$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$jscomp$0$$.attends));$p$jscomp$0$$.group_id&&($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:$p$jscomp$0$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=
36
+ $users_will_receive$$.concat($admins_of_user_sandbox_us$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$jscomp$0$$.id_app,{$or:[{ma_kh:$obj$jscomp$0$$.ma_kh},{_id:$obj$jscomp$0$$.id_kh}]},"of_user"))&&($users_will_receive$$=$users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$jscomp$0$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.user_created]):
37
+ !1===$p$jscomp$0$$.send_to_user_created&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$jscomp$0$$.handle_receivers;if(0>$str_func$$.indexOf("async ")){0>$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{
39
38
  try{
40
39
  ${$str_func$$}
41
40
  }catch(e){
@@ -1,11 +1,12 @@
1
1
  'use strict';const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{ERRORS,checkReference,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),deleteHandler=async($ctrl$$,$req$$,$mainCallback$$)=>{let $model$$=$ctrl$$.model,$module$$=$ctrl$$.module,$_id$$=$req$$.params.id;if(!$_id$$||!global.mongoose.Types.ObjectId.isValid($_id$$))return $mainCallback$$({error:"id is required"});
2
- let $obj$jscomp$2$$=await $model$$.findOne({_id:$_id$$});if(!$obj$jscomp$2$$)return $mainCallback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});let $listinfo_code$$=$obj$jscomp$2$$.toObject().listinfo_code||$ctrl$$.name;async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$jscomp$2$$.trang_thai&&($q_approve_requireOtp$$={id_ct:$obj$jscomp$2$$._id.toString(),user_approved:{$exists:!0}},await global.getModel("approve").findOne($q_approve_requireOtp$$)))return $callback$$({error:"Kh\u00f4ng th\u1ec3 xo\u00e1 ch\u1ee9ng t\u1eeb n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t"});
3
- const $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option;if($obj$jscomp$2$$.ngay_ct&&$obj$jscomp$2$$.id_app&&$obj$jscomp$2$$.schema&&$obj$jscomp$2$$.schema.validate&&$obj$jscomp$2$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,$rj$$)=>{validator.unlockBook[0]($obj$jscomp$2$$.id_app,$obj$jscomp$2$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$({error:$e$$.message||
4
- $e$$.error||$e$$,code:ERRORS.BOOK_LOCK})}$obj$jscomp$2$$=convertObjectIdsToStrings($obj$jscomp$2$$.toObject());var $q_approve_requireOtp$$=$ctrl$$.options.requireOtp;$q_approve_requireOtp$$&&_.isFunction($q_approve_requireOtp$$)&&($q_approve_requireOtp$$=$q_approve_requireOtp$$($obj$jscomp$2$$,{action:"delete",_id:$_id$$,user:$user$$}));if($q_approve_requireOtp$$)try{await permission.verifyOTP($user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||
5
- $e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"delete",obj:$obj$jscomp$2$$});permission.hasRight($ctrl$$.require_id_app?$obj$jscomp$2$$.id_app:void 0,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,$hr$$){if($hr$$)checkReference($model$$,$obj$jscomp$2$$,function($error$$){if($error$$)return $callback$$({error:ERRORS.ERR_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE});
6
- $req$$.obj=$obj$jscomp$2$$;$callback$$()});else return $callback$$({error:$error$jscomp$0$$.error||$error$jscomp$0$$||ERRORS.ERR_NOT_PERMIT,code:$error$jscomp$0$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},{obj:$obj$jscomp$2$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})})},function($callback$$){setImmediate(()=>{let $obj$jscomp$1$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$jscomp$1$$,function($e$$,$obj$jscomp$0$$){if($e$$)return console.error("deleting",$e$$),$e$$.error?
7
- $callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$0$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$jscomp$0$$,$callback$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$1$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},
8
- {listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$jscomp$1$$,$callback$$())})},function($callback$$){setImmediate(()=>{let $obj$jscomp$0$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error("delete post",$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||
9
- $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$$});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,
10
- $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&&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?
11
- $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$$,$callback$$(null))})})})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})};module.exports=deleteHandler;
2
+ let $obj$jscomp$2$$=await $model$$.findOne({_id:$_id$$});if(!$obj$jscomp$2$$)return $mainCallback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});let $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||$req$$.query["listinfo-code"]||$obj$jscomp$2$$.toObject().listinfo_code||$ctrl$$.name;async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$jscomp$2$$.trang_thai&&($q_approve_requireOtp$$={id_ct:$obj$jscomp$2$$._id.toString(),
3
+ user_approved:{$exists:!0}},await global.getModel("approve").findOne($q_approve_requireOtp$$)))return $callback$$({error:"Kh\u00f4ng th\u1ec3 xo\u00e1 ch\u1ee9ng t\u1eeb n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t"});const $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option;if($obj$jscomp$2$$.ngay_ct&&$obj$jscomp$2$$.id_app&&$obj$jscomp$2$$.schema&&$obj$jscomp$2$$.schema.validate&&$obj$jscomp$2$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,
4
+ $rj$$)=>{validator.unlockBook[0]($obj$jscomp$2$$.id_app,$obj$jscomp$2$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.BOOK_LOCK})}$obj$jscomp$2$$=convertObjectIdsToStrings($obj$jscomp$2$$.toObject());var $q_approve_requireOtp$$=$ctrl$$.options.requireOtp;$q_approve_requireOtp$$&&_.isFunction($q_approve_requireOtp$$)&&($q_approve_requireOtp$$=$q_approve_requireOtp$$($obj$jscomp$2$$,
5
+ {action:"delete",_id:$_id$$,user:$user$$}));if($q_approve_requireOtp$$)try{await permission.verifyOTP($user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"delete",obj:$obj$jscomp$2$$});permission.hasRight($ctrl$$.require_id_app?$obj$jscomp$2$$.id_app:void 0,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,
6
+ $hr$$){if($hr$$)checkReference($model$$,$obj$jscomp$2$$,function($error$$){if($error$$)return $callback$$({error:ERRORS.ERR_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE});$req$$.obj=$obj$jscomp$2$$;$callback$$()});else return $callback$$({error:$error$jscomp$0$$.error||$error$jscomp$0$$||ERRORS.ERR_NOT_PERMIT,code:$error$jscomp$0$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},{obj:$obj$jscomp$2$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})})},function($callback$$){setImmediate(()=>
7
+ {let $obj$jscomp$1$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$jscomp$1$$,function($e$$,$obj$jscomp$0$$){if($e$$)return console.error("deleting",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$0$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$jscomp$0$$,$callback$$())},
8
+ {req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$1$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$jscomp$1$$,$callback$$())})},function($callback$$){setImmediate(()=>{let $obj$jscomp$0$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error("delete post",
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
+ 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
+ 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;
@@ -1,31 +1,31 @@
1
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$$,
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
- ($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});let $listinfo_code$$=$obj$jscomp$1$$.toObject().listinfo_code||$ctrl$$.name;$data$$.listinfo_code=$listinfo_code$$;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;let $voucher_options$$;$listinfo_code$$&&($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,
4
- 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");try{await permission.verifyReCaptcha($data$$["g-recaptcha-response"])}catch($e$$){return $callback$jscomp$0$$($e$$.message||
5
- $e$$.error||$e$$)}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($data$$,{action:$_action$$,_id:$id$$,user:$user$$}));if($requireOtp$$&&"import"!==$_action$$)try{await permission.verifyOTP($user$$.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}let $checkSoCT$$=function($obj$$,$callback$$){if($model$$.schema.paths.ngay_ct&&
6
- $model$$.schema.paths.so_ct&&$obj$$.ngay_ct&&$data$$.so_ct&&$obj$$.so_ct!==$data$$.so_ct&&$voucher_options$$?.check_so_ct&&"0"!==$voucher_options$$?.check_so_ct){let $query_check$$={id_app:$obj$$.id_app,so_ct:$data$$.so_ct,listinfo_code:$listinfo_code$$||$ctrl$$.name,_id:{$ne:$obj$$._id.toString()}},$tu_ngay$$;var $date_check_den_ngay$$=$data$$.ngay_ct||$obj$$.ngay_ct;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("date").toDate();$date_check_den_ngay$$=
7
- moment($date_check_den_ngay$$).endOf("date").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "2":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("month").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "3":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("quarter").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("quarter").toDate();
8
- $query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "8":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$date_check_den_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{setImmediate(()=>{if($rs$$)return $callback$$("S\u1ed1 ch\u1ee9ng t\u1eeb "+$data$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c");
9
- $callback$$(null,$obj$$)})}).catch($e$$=>{console.error($e$$)})}else $callback$$(null,$obj$$)};async.waterfall([function($_callback$$){setImmediate(async function(){$data$$.trang_thai&&($data$$.trang_thai=$data$$.trang_thai.toString());if($data$$.trang_thai||$obj$jscomp$1$$.trang_thai){var $old_obj_old_request_q_approve$$={id_ct:$obj$jscomp$1$$._id.toString(),user_approved:{$exists:!0}};$old_obj_old_request_q_approve$$.trang_thai=($data$$.trang_thai||$obj$jscomp$1$$.trang_thai||"").toString();if(($old_obj_old_request_q_approve$$=
10
- await global.getModel("approve").findOne($old_obj_old_request_q_approve$$))&&1!=$old_obj_old_request_q_approve$$.update_after_approve?.cho_phep_cap_nhat_khi_da_duyet){$_callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt ch\u1ee9ng t\u1eeb \u1edf tr\u1ea1ng th\u00e1i n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t",void 0);return}}if($obj$jscomp$1$$.ngay_ct&&$obj$jscomp$1$$.id_app&&$obj$jscomp$1$$.schema&&$obj$jscomp$1$$.schema.validate&&$obj$jscomp$1$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,
11
- $rj$$)=>{validator.unlockBook[0]($obj$jscomp$1$$.id_app,$obj$jscomp$1$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){$_callback$$($e$$.message||$e$$.error||$e$$,void 0);return}$schema_paths$$.exfields&&($obj$jscomp$1$$.exfields=$obj$jscomp$1$$.exfields||{});$old_obj_old_request_q_approve$$=convertObjectIdsToStrings($obj$jscomp$1$$.toObject());$current_obj$$=_.cloneDeep($old_obj_old_request_q_approve$$);const $data_keys$$=
12
- Object.keys($data$$);for(let $key$$ in $old_obj_old_request_q_approve$$)0>$data_keys$$.indexOf($key$$)&&($data$$[$key$$]=$old_obj_old_request_q_approve$$[$key$$]);$_callback$$(null,$obj$jscomp$1$$)})},function($obj$$,$_callback$$){setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$_action$$,data:$data$$,obj:$current_obj$$});async.parallel({old_data:$callback$$=>{permission.hasRight($user$$.current_id_app,$user$$.email,$module$$,$_action$$,function($error$$,
13
- $hr$$,$c_app$$){setImmediate(()=>{if($hr$$)$ctrl$$.checkData($c_app$$,{...$data$$,_id:$obj$$._id.toString()},$e$$=>{if($e$$)return $callback$$($e$$);$callback$$(null,$obj$$)});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})})},{obj:$current_obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})},new_data:$callback$$=>{permission.hasRight($user$$.current_id_app,$user$$.email,$module$$,$_action$$,function($error$$,
14
- $hr$$,$c_app$$){setImmediate(()=>{if($hr$$)$ctrl$$.checkData($c_app$$,{...$data$$,_id:$obj$$._id.toString()},$e$$=>{if($e$$)return $callback$$($e$$);$callback$$(null,$obj$$)});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})})},{data:$data$$,obj:$current_obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})}},$e$$=>{$_callback$$($e$$,$obj$$)})})},($obj$$,$_callback$$)=>{setImmediate(function(){let $current_trang_thai$$=
15
- $data$$.trang_thai||$obj$$.trang_thai,$current_so_ct$$=$data$$.so_ct||$obj$$.so_ct;if($current_trang_thai$$!==$obj$$.trang_thai&&(!$voucher_options$$?.trang_thai_create_voucher_numbers||0==$voucher_options$$?.trang_thai_create_voucher_numbers.length||0<=$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($current_trang_thai$$))&&$model$$.schema.paths.so_ct)if($current_so_ct$$&&$current_so_ct$$.toUpperCase()!==($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$current_so_ct$$.toUpperCase()!==
16
- $ctrl$$.name.toUpperCase())$checkSoCT$$($obj$$,$error$$=>{$_callback$$($error$$,$obj$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,100>$count$$)},function($callbackWhilst$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){setImmediate(()=>{if($e$$)return $callbackWhilst$$($e$$);$data$$.so_ct=$rs$$.so_ct;$checkSoCT$$($obj$$,$error$$=>{$error$$?99<=$count$$?$callbackWhilst$$($error$$):($count$$++,$callbackWhilst$$()):($count$$=99999,$callbackWhilst$$())})})},
17
- {...($obj$$.toObject?$obj$$.toObject():$obj$$),...$data$$})},function($err$$){$_callback$$($err$$,$obj$$)})}else $_callback$$(null,$obj$$)})},$checkSoCT$$,($obj$jscomp$0$$,$_callback$$)=>{(async($obj$$,$callback$$)=>{try{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $data$$[$f$$]})}catch($e$$){console.error("Error get field not right",$e$$)}setImmediate(function(){$ctrl$$.updating?$ctrl$$.updating($user$$,$data$$,$obj$$,function($error$jscomp$0$$,
18
- $_data$$,$_obj$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicUpdating)$ctrl$$.dynamicUpdating($user$$,$_data$$,$_obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$});else{for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)}})}):
19
- $ctrl$$.dynamicUpdating?$ctrl$$.dynamicUpdating($user$$,$data$$,$obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$}):$callback$$(null,$obj$$)})})($obj$jscomp$0$$,($err$$,$next$$)=>{$_callback$$($err$$,$next$$)})},function($obj$$,$_callback$$){setImmediate(function(){if($unique$$&&0!==$unique$$.length){var $c1$$={},$c2$$={};$obj$$.id_app&&
20
- ($c1$$.id_app=$obj$$.id_app,$c2$$.id_app||($c2$$.id_app=$obj$$.id_app));$unique$$.forEach(function($key$$){$c1$$[$key$$]=$obj$$[$key$$];$ctrl$$.model.schema.paths[$key$$]?("number"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=Number($data$$[$key$$]):"date"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=new Date($data$$[$key$$]):"string"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=($data$$[$key$$]||"").toString():$c2$$[$key$$]=
21
- $data$$[$key$$],$c2$$[$key$$]||($c2$$[$key$$]=$c1$$[$key$$])):console.error("field",$key$$," is not exist. please check unique of controller")});!0!==_.isEqual($c1$$,$c2$$)?isExists($model$$,$unique$$,$c2$$,$ctrl$$.replaceIfExists,function($error$jscomp$0$$,$kq$$){setImmediate(()=>{if($error$jscomp$0$$||$kq$$){let $msgError$$=$error$jscomp$0$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);
22
- $_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0)}else checkReference($model$$,$obj$$,function($error$$){setImmediate(()=>{$error$$?(console.error("Keys arise data",$c1$$,$c2$$,$error$$),$_callback$$({error:ERRORS.ERR_KEY_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_KEY_ARISE_CODE},void 0)):$_callback$$(null,$obj$$)})},$unique$$)})}):$_callback$$(null,$obj$$)}else $_callback$$(null,$obj$$)})},function($obj$$,$_callback$$){const $callback$$=
23
- ($err$$,$next$$)=>{$_callback$$($err$$,$next$$)};let $keys$$=Object.keys($model$$.referenceKeys||{}).filter($key$$=>"_id"!==$key$$);$unique$$&&($keys$$=$keys$$.filter($key$$=>0>$unique$$.indexOf($key$$).length));0===$keys$$.length?$_callback$$(null,$obj$$):checkReference($model$$,$obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},
24
- $current_obj$$);else $callback$$({error:ERRORS.ERR_ARISE+($msgError$$.error||$msgError$$.message||$msgError$$),code:ERRORS.ERR_ARISE_CODE});else $_callback$$(null,$obj$$)})},$keys$$)},function($obj$jscomp$0$$,$_callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$data$$,$next$$)=>{$next$$(null,$data$$)});$data$$._id=$obj$jscomp$0$$._id;$ctrl$$.validating($user$$,$data$$,($error$$,$data$jscomp$0$$)=>{$error$$?$_callback$$($error$$,void 0):setImmediate(function(){$data$jscomp$0$$.date_updated=
25
- new Date;$data$jscomp$0$$.user_updated=$user$$.email;delete $data$jscomp$0$$.__v;$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()});$ctrl$$.options.onUpdateExtending($obj$jscomp$0$$,$data$jscomp$0$$,$action$$,function(){$schema_paths$$.exfields&&$data$jscomp$0$$.exfields&&($obj$jscomp$0$$.exfields=$data$jscomp$0$$.exfields);delete $data$jscomp$0$$.__v;for(let $f$$ in $data$jscomp$0$$)$schema_paths$$[$f$$]&&"_id"!==$f$$&&($obj$jscomp$0$$.set($f$$,
26
- $data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else $_callback$$(null,$obj$jscomp$0$$)})},$voucher_options$$)})})},{action:$action$$})},function($obj$$,
27
- $_callback$$){$current_obj$$&&($obj$$._id=$current_obj$$._id);deletePost($user$$,$obj$$,async($e$jscomp$0$$,$_old_obj$$,$books$$)=>{$oldBooks$$=$books$$;if($ctrl$$.dynamicDeletePost)try{let $oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj$$);if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)$oldBooks$$[$key$$]||($oldBooks$$[$key$$]=$oldDanamicBook$$[$key$$])}catch($e$$){console.error($e$$)}$_callback$$($e$jscomp$0$$,$obj$$)})},function($obj$$,$_callback$$){const $callback$$=($err$$,$next$$)=>
28
- {$_callback$$($err$$,$next$$)};setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>
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
+ ($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");
5
+ try{await permission.verifyReCaptcha($data$$["g-recaptcha-response"])}catch($e$$){return $callback$jscomp$0$$($e$$.message||$e$$.error||$e$$)}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($data$$,{action:$_action$$,_id:$id$$,user:$user$$}));if($requireOtp$$&&"import"!==$_action$$)try{await permission.verifyOTP($user$$.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $callback$jscomp$0$$({error:$e$$.message||$e$$.error||
6
+ $e$$,code:ERRORS.ERR_VERIFY_OTP})}let $checkSoCT$$=function($obj$$,$callback$$){if($model$$.schema.paths.ngay_ct&&$model$$.schema.paths.so_ct&&$obj$$.ngay_ct&&$data$$.so_ct&&$obj$$.so_ct!==$data$$.so_ct&&$voucher_options$$?.check_so_ct&&"0"!==$voucher_options$$?.check_so_ct){let $query_check$$={id_app:$obj$$.id_app,so_ct:$data$$.so_ct,listinfo_code:$listinfo_code$$||$ctrl$$.name,_id:{$ne:$obj$$._id.toString()}},$tu_ngay$$;var $date_check_den_ngay$$=$data$$.ngay_ct||$obj$$.ngay_ct;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=
7
+ moment($date_check_den_ngay$$).startOf("date").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("date").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "2":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("month").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "3":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("quarter").toDate();
8
+ $date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "8":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$date_check_den_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{setImmediate(()=>{if($rs$$)return $callback$$("S\u1ed1 ch\u1ee9ng t\u1eeb "+
9
+ $data$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c");$callback$$(null,$obj$$)})}).catch($e$$=>{console.error($e$$)})}else $callback$$(null,$obj$$)};async.waterfall([function($_callback$$){setImmediate(async function(){$data$$.trang_thai&&($data$$.trang_thai=$data$$.trang_thai.toString());if($data$$.trang_thai||$obj$jscomp$1$$.trang_thai){var $old_obj_old_request_q_approve$$={id_ct:$obj$jscomp$1$$._id.toString(),user_approved:{$exists:!0}};
10
+ $old_obj_old_request_q_approve$$.trang_thai=($data$$.trang_thai||$obj$jscomp$1$$.trang_thai||"").toString();if(($old_obj_old_request_q_approve$$=await global.getModel("approve").findOne($old_obj_old_request_q_approve$$))&&1!=$old_obj_old_request_q_approve$$.update_after_approve?.cho_phep_cap_nhat_khi_da_duyet){$_callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt ch\u1ee9ng t\u1eeb \u1edf tr\u1ea1ng th\u00e1i n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t",void 0);return}}if($obj$jscomp$1$$.ngay_ct&&
11
+ $obj$jscomp$1$$.id_app&&$obj$jscomp$1$$.schema&&$obj$jscomp$1$$.schema.validate&&$obj$jscomp$1$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,$rj$$)=>{validator.unlockBook[0]($obj$jscomp$1$$.id_app,$obj$jscomp$1$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){$_callback$$($e$$.message||$e$$.error||$e$$,void 0);return}$schema_paths$$.exfields&&($obj$jscomp$1$$.exfields=$obj$jscomp$1$$.exfields||{});$old_obj_old_request_q_approve$$=
12
+ convertObjectIdsToStrings($obj$jscomp$1$$.toObject());$current_obj$$=_.cloneDeep($old_obj_old_request_q_approve$$);const $data_keys$$=Object.keys($data$$);for(let $key$$ in $old_obj_old_request_q_approve$$)0>$data_keys$$.indexOf($key$$)&&($data$$[$key$$]=$old_obj_old_request_q_approve$$[$key$$]);$_callback$$(null,$obj$jscomp$1$$)})},function($obj$$,$_callback$$){setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$_action$$,data:$data$$,obj:$current_obj$$});
13
+ async.parallel({old_data:$callback$$=>{permission.hasRight($user$$.current_id_app,$user$$.email,$module$$,$_action$$,function($error$$,$hr$$,$c_app$$){setImmediate(()=>{if($hr$$)$ctrl$$.checkData($c_app$$,{...$data$$,_id:$obj$$._id.toString()},$e$$=>{if($e$$)return $callback$$($e$$);$callback$$(null,$obj$$)});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})})},{obj:$current_obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})},
14
+ new_data:$callback$$=>{permission.hasRight($user$$.current_id_app,$user$$.email,$module$$,$_action$$,function($error$$,$hr$$,$c_app$$){setImmediate(()=>{if($hr$$)$ctrl$$.checkData($c_app$$,{...$data$$,_id:$obj$$._id.toString()},$e$$=>{if($e$$)return $callback$$($e$$);$callback$$(null,$obj$$)});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})})},{data:$data$$,obj:$current_obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})}},
15
+ $e$$=>{$_callback$$($e$$,$obj$$)})})},($obj$$,$_callback$$)=>{setImmediate(function(){let $current_trang_thai$$=$data$$.trang_thai||$obj$$.trang_thai,$current_so_ct$$=$data$$.so_ct||$obj$$.so_ct;if($current_trang_thai$$!==$obj$$.trang_thai&&(!$voucher_options$$?.trang_thai_create_voucher_numbers||0==$voucher_options$$?.trang_thai_create_voucher_numbers.length||0<=$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($current_trang_thai$$))&&$model$$.schema.paths.so_ct)if($current_so_ct$$&&
16
+ $current_so_ct$$.toUpperCase()!==($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$current_so_ct$$.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkSoCT$$($obj$$,$error$$=>{$_callback$$($error$$,$obj$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,100>$count$$)},function($callbackWhilst$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){setImmediate(()=>{if($e$$)return $callbackWhilst$$($e$$);$data$$.so_ct=$rs$$.so_ct;$checkSoCT$$($obj$$,$error$$=>
17
+ {$error$$?99<=$count$$?$callbackWhilst$$($error$$):($count$$++,$callbackWhilst$$()):($count$$=99999,$callbackWhilst$$())})})},{...($obj$$.toObject?$obj$$.toObject():$obj$$),...$data$$})},function($err$$){$_callback$$($err$$,$obj$$)})}else $_callback$$(null,$obj$$)})},$checkSoCT$$,($obj$jscomp$0$$,$_callback$$)=>{(async($obj$$,$callback$$)=>{try{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $data$$[$f$$]})}catch($e$$){console.error("Error get field not right",
18
+ $e$$)}setImmediate(function(){$ctrl$$.updating?$ctrl$$.updating($user$$,$data$$,$obj$$,function($error$jscomp$0$$,$_data$$,$_obj$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicUpdating)$ctrl$$.dynamicUpdating($user$$,$_data$$,$_obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$});
19
+ else{for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)}})}):$ctrl$$.dynamicUpdating?$ctrl$$.dynamicUpdating($user$$,$data$$,$obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$}):$callback$$(null,$obj$$)})})($obj$jscomp$0$$,($err$$,$next$$)=>{$_callback$$($err$$,$next$$)})},function($obj$$,
20
+ $_callback$$){setImmediate(function(){if($unique$$&&0!==$unique$$.length){var $c1$$={},$c2$$={};$obj$$.id_app&&($c1$$.id_app=$obj$$.id_app,$c2$$.id_app||($c2$$.id_app=$obj$$.id_app));$unique$$.forEach(function($key$$){$c1$$[$key$$]=$obj$$[$key$$];$ctrl$$.model.schema.paths[$key$$]?("number"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=Number($data$$[$key$$]):"date"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=new Date($data$$[$key$$]):"string"==
21
+ $ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()?$c2$$[$key$$]=($data$$[$key$$]||"").toString():$c2$$[$key$$]=$data$$[$key$$],$c2$$[$key$$]||($c2$$[$key$$]=$c1$$[$key$$])):console.error("field",$key$$," is not exist. please check unique of controller")});!0!==_.isEqual($c1$$,$c2$$)?isExists($model$$,$unique$$,$c2$$,$ctrl$$.replaceIfExists,function($error$jscomp$0$$,$kq$$){setImmediate(()=>{if($error$jscomp$0$$||$kq$$){let $msgError$$=$error$jscomp$0$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,
22
+ $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0)}else checkReference($model$$,$obj$$,function($error$$){setImmediate(()=>{$error$$?(console.error("Keys arise data",$c1$$,$c2$$,$error$$),$_callback$$({error:ERRORS.ERR_KEY_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_KEY_ARISE_CODE},void 0)):$_callback$$(null,$obj$$)})},$unique$$)})}):$_callback$$(null,$obj$$)}else $_callback$$(null,
23
+ $obj$$)})},function($obj$$,$_callback$$){const $callback$$=($err$$,$next$$)=>{$_callback$$($err$$,$next$$)};let $keys$$=Object.keys($model$$.referenceKeys||{}).filter($key$$=>"_id"!==$key$$);$unique$$&&($keys$$=$keys$$.filter($key$$=>0>$unique$$.indexOf($key$$).length));0===$keys$$.length?$_callback$$(null,$obj$$):checkReference($model$$,$obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=
24
+ $msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $callback$$({error:ERRORS.ERR_ARISE+($msgError$$.error||$msgError$$.message||$msgError$$),code:ERRORS.ERR_ARISE_CODE});else $_callback$$(null,$obj$$)})},$keys$$)},function($obj$jscomp$0$$,$_callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$data$$,$next$$)=>{$next$$(null,$data$$)});$data$$._id=$obj$jscomp$0$$._id;$ctrl$$.validating($user$$,$data$$,($error$$,$data$jscomp$0$$)=>{$error$$?$_callback$$($error$$,void 0):
25
+ setImmediate(function(){$data$jscomp$0$$.date_updated=new Date;$data$jscomp$0$$.user_updated=$user$$.email;delete $data$jscomp$0$$.__v;$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()});$ctrl$$.options.onUpdateExtending($obj$jscomp$0$$,$data$jscomp$0$$,$action$$,function(){$schema_paths$$.exfields&&$data$jscomp$0$$.exfields&&($obj$jscomp$0$$.exfields=$data$jscomp$0$$.exfields);delete $data$jscomp$0$$.__v;for(let $f$$ in $data$jscomp$0$$)$schema_paths$$[$f$$]&&
26
+ "_id"!==$f$$&&($obj$jscomp$0$$.set($f$$,$data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else $_callback$$(null,$obj$jscomp$0$$)})},$voucher_options$$)})})},
27
+ {action:$action$$})},function($obj$$,$_callback$$){$current_obj$$&&($obj$$._id=$current_obj$$._id);deletePost($user$$,$obj$$,async($e$jscomp$0$$,$_old_obj$$,$books$$)=>{$oldBooks$$=$books$$;if($ctrl$$.dynamicDeletePost)try{let $oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj$$);if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)$oldBooks$$[$key$$]||($oldBooks$$[$key$$]=$oldDanamicBook$$[$key$$])}catch($e$$){console.error($e$$)}$_callback$$($e$jscomp$0$$,$obj$$)})},function($obj$$,$_callback$$){const $callback$$=
28
+ ($err$$,$next$$)=>{$_callback$$($err$$,$next$$)};setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>
29
29
  "line"!==$path$$&&"_id"!==$path$$&&"__v"!==$path$$&&0<=fields_sync_master_detail.indexOf($path$$)).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,$_action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$current_obj$$&&($obj$$._id=$current_obj$$._id);
30
30
  let $obj_created$$,$error$jscomp$0$$;$data$$.$condition&&($$condition_k$$=$data$$.$condition,$$condition_k$$._id=$obj$$._id,await $model$$.findOne($$condition_k$$)||($error$jscomp$0$$=ERRORS.ERR_CAN_NOT_UPDATE),delete $data$$.$condition);if(!$error$jscomp$0$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save(),$ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id),$obj_created$$=await $ctrl$$.populate($obj_created$$))}catch($e$$){if($error$jscomp$0$$=$e$$,$ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,
31
31
  $obj$$,$error$jscomp$0$$,$_action$$)}if($error$jscomp$0$$){let $msgErrors$$=[];for(let $k$$ in $error$jscomp$0$$.errors)$msgErrors$$.push($error$jscomp$0$$.errors[$k$$].message);0==$msgErrors$$.length&&($msgErrors$$=$error$jscomp$0$$.message);$msgErrors$$||($msgErrors$$=JSON.stringify($error$jscomp$0$$));if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&console.error("onErrorUpdating",$e$$);$_callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE},
package/server/global.js CHANGED
@@ -2,7 +2,7 @@
2
2
  global.blockchainTransactionPool=new TransactionPool;global.new_schedules=[];global.rootDir=__dirname;global.ctrlVouchers={};global.controllers={};global.report_controllers={};global.postingVouchers={};global.cacheDatas={};
3
3
  global.socketContainer={loadConnectionId:async()=>new Promise($res$$=>{global.clientRedis.get("client-io",function($err$$,$reply$$){if($err$$)return console.error($err$$),$res$$({});if($reply$$)try{let $ios$$=JSON.parse($reply$$);return $res$$($ios$$||{})}catch($e$$){return console.error($e$$),$res$$({})}else return $res$$({})})}),saveConnectionId:async($clientIO$$={})=>new Promise(($res$$,$rej$$)=>{global.clientRedis.set("client-io",JSON.stringify($clientIO$$),$e$$=>{if($e$$)return console.error($e$$),
4
4
  $rej$$($e$$);$res$$($clientIO$$)})})};global.clientIO={};global.model_books="socai socaitmp socainpp vsocai sokho sokhott sokhonpp sokhokhongton sosanxuat vatvao vatra phucap".split(" ");global.secu_models="asskey assproduct assperiod assinvestment asssell assbuy assneedtobuy asswithdraw asscashwithdraw wallet assfindhash assbank asstransaction assissue token tokens user app listinfo right otp payload usergroup smsaccount emailaccount".split(" ");global.webPush=require("web-push");
5
- global.mongoose=require("mongoose");global.mongoose.plugin(leanID);global.mongoose.plugin(deletePost);global.mongoose.plugin(globalListinfoCodePlugin);global.mongoose.plugin(function($schema$$){$schema$$.set("versionKey",!1)});global.Schema=global.mongoose.Schema;
5
+ global.mongoose=require("mongoose");require("./libs/mongoosePatch.js");global.mongoose.plugin(leanID);global.mongoose.plugin(deletePost);global.mongoose.plugin(globalListinfoCodePlugin);global.mongoose.plugin(function($schema$$){$schema$$.set("versionKey",!1)});global.Schema=global.mongoose.Schema;
6
6
  global.getModel=$model_name$$=>{$model_name$$=$model_name$$.split(".js")[0];"kbmpttct"===$model_name$$&&($model_name$$="kbmPttct");"kbmtkgtgt"===$model_name$$&&($model_name$$="kbmTkgtgt");"token"===$model_name$$&&($model_name$$="tokens");"bn1"===$model_name$$&&($model_name$$="pc1");"bc1"===$model_name$$&&($model_name$$="pt1");var $_requireFields_model_model_path_mySchema$$=mongoose.models[$model_name$$];if($_requireFields_model_model_path_mySchema$$)return $_requireFields_model_model_path_mySchema$$;
7
7
  if(((global.configs||{}).paths||{}).models&&($_requireFields_model_model_path_mySchema$$=((global.configs||{}).paths||{}).models+"/"+$model_name$$+".js",fs.existsSync($_requireFields_model_model_path_mySchema$$)))return require($_requireFields_model_model_path_mySchema$$);$_requireFields_model_model_path_mySchema$$=__dirname+"/models/"+$model_name$$+".js";if(fs.existsSync($_requireFields_model_model_path_mySchema$$))return require($_requireFields_model_model_path_mySchema$$);console.error("model",
8
8
  $model_name$$,"is not exists. create new model");$_requireFields_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_model_model_path_mySchema$$=new global.Schema($_requireFields_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name$$,$_requireFields_model_model_path_mySchema$$)};global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
@@ -0,0 +1,8 @@
1
+ 'use strict';const {getCurrentSession,runWithSession,isModelExcludedFromSession,isSessionActive}=require("./sessionContext"),DEBUG="true"===process.env.MONGO_DEBUG;function logDebug($prefix$$,$model$$,$method$$,$opts$$={}){DEBUG&&$opts$$.session&&console.log(`[${$prefix$$}] Model=${$model$$?.modelName||"?"} Method=${$method$$} Session=${$opts$$.session?$opts$$.session.id||$opts$$.session.client?.id||"(no id)":"none"}`)}
2
+ const writeMethods="save updateOne updateMany deleteOne deleteMany findOneAndUpdate findOneAndDelete findOneAndRemove insertMany create".split(" "),readMethods="find findOne findById findByIdAndUpdate findByIdAndDelete findByIdAndRemove aggregate count countDocuments distinct".split(" ");
3
+ [...writeMethods,...readMethods].forEach($method$$=>{const $original$$=mongoose.Model.prototype[$method$$];"function"===typeof $original$$&&(mongoose.Model.prototype[$method$$]=function(...$args$$){const $session$$=getCurrentSession(),$lastArg$$=$args$$[$args$$.length-1],$hasCallback$$="function"===typeof $lastArg$$;let $opts$$=$args$$[$hasCallback$$?$args$$.length-2:$args$$.length-1];if("object"!==typeof $opts$$||Array.isArray($opts$$))$opts$$={},$hasCallback$$?$args$$.splice($args$$.length-1,0,
4
+ $opts$$):$args$$.push($opts$$);!$session$$||$opts$$.session||isModelExcludedFromSession(this.constructor.modelName)?logDebug("NoSession",this,$method$$,{session:$opts$$.session}):isSessionActive($session$$)?($opts$$.session=$session$$,logDebug("AttachSession",this,$method$$,{session:$session$$})):console.warn(`[WARN] ${this.modelName}.${$method$$}(): session \u0111\u00e3 commit, t\u1ef1 \u0111\u1ed9ng b\u1ecf qua.`);$hasCallback$$&&($args$$[$args$$.length-1]=(...$cbArgs$$)=>runWithSession($session$$,
5
+ ()=>$lastArg$$(...$cbArgs$$)));try{const $result$$=$original$$.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK",this,$method$$,{session:$opts$$.session})).catch($err$$=>{console.error(`[ERR] ${this.modelName}.${$method$$} Session=${$opts$$.session?.id||"none"}`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW] ${this.modelName}.${$method$$}`,$err$$),$err$$;}})});const originalExec=mongoose.Query.prototype.exec;
6
+ originalExec&&(mongoose.Query.prototype.exec=function(...$args$$){const $session$$=getCurrentSession(),$modelName$$=this.model?.modelName||"UnknownModel",$operation$$=this.op||"unknownOp";var $cbIndex_isExcluded$$=isModelExcludedFromSession(this.model);$session$$&&isSessionActive($session$$)&&!$cbIndex_isExcluded$$&&!this.options.session?(this.options.session=$session$$,logDebug("AttachSession(Query)",this.model,$operation$$,{session:$session$$})):$session$$&&!isSessionActive($session$$)?logDebug("SkipInvalidSession(Query)",
7
+ this.model,$operation$$,{session:$session$$}):$cbIndex_isExcluded$$?logDebug("ExcludedModel(Query)",this.model,$operation$$):logDebug("NoSession(Query)",this.model,$operation$$,{session:this.options.session});$cbIndex_isExcluded$$=$args$$.findIndex($a$$=>"function"===typeof $a$$);if(-1!==$cbIndex_isExcluded$$){const $cb$$=$args$$[$cbIndex_isExcluded$$];$args$$[$cbIndex_isExcluded$$]=(...$cbArgs$$)=>runWithSession($session$$,()=>$cb$$(...$cbArgs$$))}try{const $result$$=originalExec.apply(this,$args$$);
8
+ $result$$?.then&&$result$$.then(()=>logDebug("OK(Query)",this.model,$operation$$,{session:this.options.session})).catch($err$$=>{console.error(`[ERR(Query)] ${$modelName$$}.${$operation$$} session=${this.options.session?.id||"none"}\n`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW(Query)] ${$modelName$$}.${$operation$$}`,$err$$),$err$$;}});console.log("[mongoosePatch] \u2705 Auto session + debug logging enabled");
@@ -0,0 +1,3 @@
1
+ 'use strict';const {AsyncLocalStorage}=require("node:async_hooks"),storage=new AsyncLocalStorage,SESSION_EXCLUDE_MODELS=["log","token","otp","cache","notification"];exports.runWithSession=async function($session$$,$fn$$){return storage.run({session:$session$$},$fn$$)};
2
+ 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$$)};exports.getCurrentSession=function(){const $store$$=storage.getStore();return $store$$?$store$$.session:void 0};
3
+ 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");