flexbiz-server
Version:
Flexible Server
18 lines (17 loc) • 7.6 kB
JavaScript
'use strict';const async=require("async"),underscore=require("underscore"),moment=require("moment"),models=[{name:"reportinfo",key:["code"]},{name:"user",key:["email"]},{name:"participant",key:["email"]},{name:"usergroup",key:["_id"]},{name:"dmvt",key:["ma_vt"]},{name:"customer",key:["ma_kh","_id"]},{name:"app",key:["_id"]},{name:"group",key:["_id"]},{name:"dokho",key:["_id"]},{name:"dvcs",key:["_id","ma_dvcs"]},{name:"dmkho",key:["ma_kho","_id"]},{name:"dmbp",key:["ma_bp","_id"]},{name:"dmnv",key:["ma_nv",
"_id"]},{name:"dmphi",key:["ma_phi","_id"]},{name:"dmdt",key:["ma_dt","_id"]},{name:"account",key:["tk"]},{name:"trangthai",key:[$obj$$=>`:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]},{name:"trangthaiapp",key:[$obj$$=>`${$obj$$._id.toString()}:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`${$obj$$._id.toString()}:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]}];
exports.cachedKeys=()=>{let $_keys$$={};models.forEach($model$$=>{$_keys$$[$model$$.name]=1});return $_keys$$};
exports.set=async function($model_name$$=null,$obj$jscomp$0$$=null,$callback$jscomp$0$$=()=>{}){$obj$jscomp$0$$&&$obj$jscomp$0$$.toObject&&($obj$jscomp$0$$=$obj$jscomp$0$$.toObject());if($obj$jscomp$0$$&&!$obj$jscomp$0$$._id)return console.error("Error when cache data: Obj does not have _id",$obj$jscomp$0$$),$callback$jscomp$0$$();if($obj$jscomp$0$$){let $query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$jscomp$0$$._id.toString()}},{query:1,id_app:1,key:1}).lean();0<$query_caches$$.length&&
await Promise.all($query_caches$$.map($r$$=>global.getModel("cache").deleteMany({id_app:$r$$.id_app,key:$r$$.key,query:$r$$.query})));if(0<=["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt"].indexOf($model_name$$)||0==$model_name$$.indexOf("ecom"))await global.getModel("cache").deleteMany({id_app:$obj$jscomp$0$$.id_app,key:"dmvt"}),await global.getModel("cache").deleteMany({id_app:"system",key:"dmvt"})}async.mapSeries(models.filter($f$$=>!$model_name$$||$f$$.name==$model_name$$),($model$$,$callback$$)=>
{$obj$jscomp$0$$?($model$$.key.forEach($key$$=>{let $_key$$;underscore.isFunction($key$$)?($_key$$=$key$$($obj$jscomp$0$$),global.clientRedis.set($_key$$,JSON.stringify($obj$jscomp$0$$))):($_key$$="_id"!==$key$$?($obj$jscomp$0$$.id_app||"")+":"+$key$$+":"+$obj$jscomp$0$$[$key$$]:"stp:"+$obj$jscomp$0$$._id.toString(),global.clientRedis.set($_key$$,JSON.stringify($obj$jscomp$0$$)),$obj$jscomp$0$$.id_app&&"_id"!==$key$$&&($_key$$="id_app:"+$obj$jscomp$0$$.id_app+":"+$key$$+":"+$obj$jscomp$0$$[$key$$],
global.clientRedis.set($_key$$,JSON.stringify($obj$jscomp$0$$))))}),$callback$$(null)):global.getModel(""+$model$$.name).find({}).lean().exec(($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$rs$$.forEach($obj$$=>{$model$$.key.forEach($key$$=>{let $_key$$;underscore.isFunction($key$$)?($_key$$=$key$$($obj$$),global.clientRedis.set($_key$$,JSON.stringify($obj$$))):($_key$$="_id"!==$key$$?($obj$$.id_app||"")+":"+$key$$+":"+$obj$$[$key$$]:"stp:"+$obj$$._id.toString(),global.clientRedis.set($_key$$,JSON.stringify($obj$$)),
$obj$$.id_app&&"_id"!==$key$$&&($_key$$="id_app:"+$obj$$.id_app+":"+$key$$+":"+$obj$$[$key$$],global.clientRedis.set($_key$$,JSON.stringify($obj$$))))})});$callback$$(null)})},($e$$,$rs$$)=>{$callback$jscomp$0$$($e$$,$rs$$)})};
exports.remove=async function($model_name$$,$obj$$,$callback$$=()=>{}){$obj$$&&$obj$$.toObject&&($obj$$=$obj$$.toObject());if($obj$$&&!$obj$$._id)return console.error("Error when delete cache data: Obj does not have _id",$obj$$),$callback$$();var $model$jscomp$2_query_caches$$=underscore.find(models,$m$$=>$m$$.name==$model_name$$);$model$jscomp$2_query_caches$$&&$model$jscomp$2_query_caches$$.key.forEach($key$$=>{let $_key$$;underscore.isFunction($key$$)?($_key$$=$key$$($obj$$),global.clientRedis.set($_key$$,
"")):($_key$$="_id"!==$key$$?($obj$$.id_app||"")+":"+$key$$+":"+$obj$$[$key$$]:"stp:"+$obj$$._id.toString(),global.clientRedis.set($_key$$,""),$obj$$.id_app&&"_id"!==$key$$&&($_key$$="id_app:"+$obj$$.id_app+":"+$key$$+":"+$obj$$[$key$$],global.clientRedis.set($_key$$,"")))});$obj$$&&($model$jscomp$2_query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$$._id.toString()}},{query:1,id_app:1,key:1}).lean(),0<$model$jscomp$2_query_caches$$.length&&(console.log("clear all relative cache",
$model_name$$,$model$jscomp$2_query_caches$$.length),await Promise.all($model$jscomp$2_query_caches$$.map($r$$=>global.getModel("cache").deleteMany({id_app:$r$$.id_app,key:$r$$.key,query:$r$$.query})))));if(0<=["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt","dmnckkm"].indexOf($model_name$$)||0==$model_name$$.indexOf("ecom"))await global.getModel("cache").deleteMany({id_app:$obj$$.id_app,key:"dmvt"}),await global.getModel("cache").deleteMany({id_app:"system",key:"dmvt"});$callback$$(null)};
exports.setObject=async($key$$,$object$$)=>new Promise(($res$$,$rej$$)=>{global.clientRedis.set($key$$,JSON.stringify($object$$),function($err$$){return $err$$?$rej$$($err$$):$res$$($object$$)})});exports.getObject=async $key$$=>new Promise(($res$$,$rej$$)=>{global.clientRedis.get($key$$,function($err$$,$reply$$){if($err$$)return $rej$$($err$$);if($reply$$)try{return $res$$(JSON.parse($reply$$))}catch($e$$){return $rej$$($e$$)}else return $res$$({})})});
exports.updateObject=async($key$$,$data$$)=>{if($data$$&&$key$$){if("object"!=typeof $data$$)throw Error("Data must be an object");var $object$$=await exports.getObject($key$$);$object$$={...$object$$,...$data$$};return exports.setObject($key$$,$object$$)}};
exports.setCacheReport=async($condition_user$$,$id_app$$,$key$$,$_query_query$$,$data$$,$page$$=1)=>{$id_app$$=$id_app$$||"system";$_query_query$$&&(delete $_query_query$$.t,delete $_query_query$$.jsonstream,delete $_query_query$$.cType,delete $_query_query$$.refresh_required,delete $_query_query$$.access_token,delete $_query_query$$.page,delete $_query_query$$.fields);$page$$=Number($page$$);$_query_query$$=JSON.stringify($_query_query$$||{});$condition_user$$={user:$condition_user$$,id_app:$id_app$$,
key:$key$$,query:$_query_query$$,page:$page$$};await global.getModel("cache").deleteMany($condition_user$$).catch($e$$=>{console.error("error delete cache data",$e$$)});if($data$$&&(!underscore.isArray($data$$)||0<$data$$.length))try{await global.getModel("cache").create({...$condition_user$$,data:JSON.stringify($data$$)})}catch($e$$){console.error("error cache data",$e$$.message)}};
exports.getCacheReport=async($condition$jscomp$1_user$$,$id_app$$,$key$$,$_query$jscomp$1_query$$,$cache_time_rs$$=0,$page$$=1)=>{$id_app$$=$id_app$$||"system";$_query$jscomp$1_query$$&&(delete $_query$jscomp$1_query$$.t,delete $_query$jscomp$1_query$$.jsonstream,delete $_query$jscomp$1_query$$.cType,delete $_query$jscomp$1_query$$.refresh_required,delete $_query$jscomp$1_query$$.access_token,delete $_query$jscomp$1_query$$.page,delete $_query$jscomp$1_query$$.fields);$page$$=Number($page$$);$_query$jscomp$1_query$$=
JSON.stringify($_query$jscomp$1_query$$||{});$condition$jscomp$1_user$$={user:$condition$jscomp$1_user$$,id_app:$id_app$$,key:$key$$,query:$_query$jscomp$1_query$$,page:$page$$};$cache_time_rs$$&&($condition$jscomp$1_user$$.date_created={$gte:moment().subtract($cache_time_rs$$,"minutes").toDate()});if($cache_time_rs$$=await global.getModel("cache").findOne($condition$jscomp$1_user$$).lean()){if("object"==typeof $cache_time_rs$$.data)return $cache_time_rs$$.data;try{return JSON.parse($cache_time_rs$$.data)}catch($e$$){console.error($e$$)}}return null};