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.
- package/enable_mongo_replica.sh +96 -0
- package/package.json +1 -1
- package/server/app.js +17 -17
- package/server/cluster.js +6 -6
- package/server/controllers/controllerUtils.js +22 -23
- package/server/controllers/deleteHandler.js +11 -10
- package/server/controllers/updateHandler.js +26 -26
- package/server/global.js +1 -1
- package/server/libs/mongoosePatch.js +8 -0
- package/server/libs/sessionContext.js +3 -0
- package/server/libs/utils.js +13 -14
- package/server/models/assuser_identity.js +3 -3
- package/server/models/banggiaban.js +5 -5
- package/server/models/email.js +1 -1
- package/server/models/listinfo.js +6 -5
- package/server/models/pn1.js +4 -4
- package/server/models/socainpp.js +9 -9
- package/server/models/tontucthoi.js +3 -3
- package/server/modules/lists/ls-calllog.js +2 -2
- package/server/modules/lists/ls-dmvt.js +23 -23
- package/server/modules/lists/ls-email.js +3 -2
- package/server/modules/lists/ls-file.js +22 -18
- package/server/modules/vouchers/vo-hd2.js +8 -8
- package/server/transactionMiddleware.js +3 -0
- package/server/workers/inputWorker.js +7 -6
- package/server/workers/reportWorker.js +5 -4
|
@@ -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
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"),
|
|
3
|
-
|
|
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."}))
|
|
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
|
|
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
|
|
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$$,
|
|
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||
|
|
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+
|
|
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,
|
|
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")
|
|
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$$))
|
|
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",
|
|
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
|
|
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$$/
|
|
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+
|
|
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,
|
|
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$$=
|
|
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=
|
|
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."}))
|
|
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
|
|
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$$());$
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
$
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
$
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
$
|
|
35
|
-
|
|
36
|
-
$
|
|
37
|
-
|
|
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(),
|
|
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
|
|
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$$,
|
|
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
|
|
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(()=>
|
|
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$$())},
|
|
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"
|
|
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$$});
|
|
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&&
|
|
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
|
|
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})
|
|
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");
|
|
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
|
|
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$$=
|
|
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()
|
|
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 "
|
|
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}}
|
|
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
|
|
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$$=
|
|
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$$});
|
|
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$$})},
|
|
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$$})}}
|
|
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
|
|
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$$=>
|
|
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"
|
|
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$$});
|
|
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
|
|
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"
|
|
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
|
|
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
|
|
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
|
|
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):
|
|
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$$]&&
|
|
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$$)})})},
|
|
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$$=
|
|
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");
|