UNPKG

flexbiz-server

Version:

Flexible Server

23 lines (22 loc) 9.23 kB
const async=require("async"),underscore=require("underscore"),{onAfterCommit,executeInTransaction}=require("./sessionContext"),models=[{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$$=>`:trangthai:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:trangthai: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.sortObjectKeys=$obj$$=>Object.keys($obj$$).sort().reduce(($acc$$,$key$$)=>({...$acc$$,[$key$$]:$obj$$[$key$$]}),{}); exports.generateRedisKey=($d_session_modelName$$,$query_query_sorted$$,$id_app$$,$key$jscomp$11_val$$)=>{$query_query_sorted$$=exports.sortObjectKeys($query_query_sorted$$);$d_session_modelName$$=$d_session_modelName$$||"";if(!$key$jscomp$11_val$$&&$query_query_sorted$$._id)$d_session_modelName$$="flex:"+$query_query_sorted$$._id;else if($key$jscomp$11_val$$){if(typeof $key$jscomp$11_val$$=="function")return $key$jscomp$11_val$$($query_query_sorted$$).replace(/\./g,"_");if($key$jscomp$11_val$$!== "id_app"&&$query_query_sorted$$[$key$jscomp$11_val$$]!==void 0&&$query_query_sorted$$[$key$jscomp$11_val$$]!==null){var $key$$=$query_query_sorted$$[$key$jscomp$11_val$$];$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$jscomp$11_val$$}:${$key$$}`:`${$key$jscomp$11_val$$}:${$key$$}`}}else for($key$$ in $query_query_sorted$$)$key$$!=="id_app"&&$query_query_sorted$$[$key$$]!==void 0&&$query_query_sorted$$[$key$$]!==null&&($key$jscomp$11_val$$=$query_query_sorted$$[$key$$], $d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$$}:${$key$jscomp$11_val$$}`:`${$key$$}:${$key$jscomp$11_val$$}`);$id_app$$=$id_app$$||$query_query_sorted$$.id_app;return($id_app$$?"id_app:"+$id_app$$+":"+$d_session_modelName$$:":"+$d_session_modelName$$).replace(/\./g,"_")};exports.cachedKeys=()=>{let $_keys$$={};models.forEach($model$$=>{$_keys$$[$model$$.name]=1});return $_keys$$}; exports.set=async function($model_name$$=null,$obj$$=null,$callback$$=()=>{}){onAfterCommit(async()=>{$obj$$&&$obj$$.toObject&&($obj$$=$obj$$.toObject());if($obj$$&&!$obj$$._id)return Logger.error("[redis-cache] Error when cache data: Obj does not have _id",$obj$$),$callback$$();if($obj$$){let $query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$$._id.toString()}},{query:1,id_app:1,key:1}).lean();$query_caches$$.length>0&&await Promise.all($query_caches$$.map($r$$=>global.getModel("cache").deleteMany({id_app:$r$$.id_app, key:$r$$.key,query:$r$$.query})));if(["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt"].indexOf($model_name$$)>=0||$model_name$$.indexOf("ecom")==0)await global.getModel("cache").deleteMany({id_app:$obj$$.id_app,key:"dmvt"}),await global.getModel("cache").deleteMany({id_app:"system",key:"dmvt"})}async.mapLimit(models.filter($f$$=>!$model_name$$||$f$$.name==$model_name$$),5,($model$$,$callback$$)=>{$obj$$?($model$$.key.forEach($_key_key$$=>{$_key_key$$=exports.generateRedisKey($model$$.name,$obj$$,$obj$$.id_app, $_key_key$$);global.clientRedis.set($_key_key$$,JSON.stringify($obj$$))}),$callback$$(null)):(Logger.info("[redis-cache] \u0111ang cache d\u1eef li\u1ec7u t\u1edbi redis...",$model$$.name),global.getModel(""+$model$$.name).find({}).lean().then($rs$$=>{$rs$$.forEach($obj$$=>{$model$$.key.forEach($_key$jscomp$1_key$$=>{$_key$jscomp$1_key$$=exports.generateRedisKey($model$$.name,$obj$$,$obj$$.id_app,$_key$jscomp$1_key$$);global.clientRedis.set($_key$jscomp$1_key$$,JSON.stringify($obj$$))})});$callback$$(null)}).catch($e$$=> {$callback$$($e$$)}))},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}; exports.remove=async function($model_name$$,$obj$$,$callback$$=()=>{}){onAfterCommit(async()=>{$obj$$&&$obj$$.toObject&&($obj$$=$obj$$.toObject());if($obj$$&&!$obj$$._id)return Logger.error("[setCahceReport] Error when delete cache data: Obj does not have _id",$obj$$),$callback$$();let $model$$=underscore.find(models,$m$$=>$m$$.name==$model_name$$);$model$$&&$model$$.key.forEach($_key$jscomp$2_key$$=>{$_key$jscomp$2_key$$=exports.generateRedisKey($model$$.name,$obj$$,$obj$$.id_app,$_key$jscomp$2_key$$); global.clientRedis.set($_key$jscomp$2_key$$,"")});if($obj$$){let $query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$$._id.toString()}},{query:1,id_app:1,key:1}).lean();$query_caches$$.length>0&&(Logger.info("[setCahceReport] clear all relative cache",$model_name$$,$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(["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt","dmnckkm"].indexOf($model_name$$)>= 0||$model_name$$.indexOf("ecom")==0)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$$=>{global.clientRedis.set($key$$,JSON.stringify($object$$),function($err$$){$err$$&&Logger.error("[Redis Cache] Kh\u00f4ng th\u1ebb cache data t\u1edbi redis",$err$$);return $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(typeof $data$$!="object")throw Error("Data must be an object");var $object$$=await exports.getObject($key$$);if(Object.keys($object$$).length==0)throw Error("Not found object");$object$$={...$object$$,...$data$$};return exports.setObject($key$$,$object$$)}}; exports.setCacheReport=async($user_created$$,$id_app$$,$code$$,$data$$,$key$$=null)=>executeInTransaction(async()=>{$id_app$$=$id_app$$||"system";$key$$&&await global.getModel("cacheSessionReport").deleteMany({id_app:$id_app$$,user_created:$user_created$$,code:$code$$,key:$key$$});var $info_rows$$=$data$$&&typeof $data$$==="object"&&!Array.isArray($data$$)?{...$data$$}:{};let $data_cache$$;Array.isArray($data$$)?$data_cache$$=$data$$:Array.isArray($data$$?.data)?($data_cache$$=$data$$.data,delete $info_rows$$.data): Array.isArray($data$$?.rows)?($data_cache$$=$data$$.rows,delete $info_rows$$.rows):Array.isArray($data$$?.list)?($data_cache$$=$data$$.list,delete $info_rows$$.list):$data_cache$$=[$data$$];let $session$$=await global.getModel("cacheSessionReport").create({id_app:$id_app$$,user_created:$user_created$$,code:$code$$,key:$key$$,info:$info_rows$$});$info_rows$$=$data_cache$$.map($d$$=>({id_session:$session$$._id.toString(),user_created:$user_created$$,id_app:$id_app$$,code:$code$$,row:$d$$}));await global.getModel("cacheDataReport").create($info_rows$$); $session$$=$session$$.toObject?$session$$.toObject():$session$$;$session$$.data_cache=$data_cache$$;return $session$$}); exports.getCacheReport=async($cached_skip_user_created$$,$id_app$$,$code$$,$id_session_total$$,$limit$$=null,$page$$=null,$key$jscomp$20_query_session_session$$=null)=>{if(!$id_session_total$$&&!$key$jscomp$20_query_session_session$$||$id_session_total$$&&!global.mongoose.Types.ObjectId.isValid($id_session_total$$))return null;$key$jscomp$20_query_session_session$$=$id_session_total$$?{id_app:$id_app$$,id_session:$id_session_total$$}:{user_created:$cached_skip_user_created$$,id_app:$id_app$$,code:$code$$, key:$key$jscomp$20_query_session_session$$};$key$jscomp$20_query_session_session$$=await global.getModel("cacheSessionReport").findOne($key$jscomp$20_query_session_session$$).lean();if(!$key$jscomp$20_query_session_session$$||$key$jscomp$20_query_session_session$$.id_app!=$id_app$$||$key$jscomp$20_query_session_session$$.code!=$code$$||$key$jscomp$20_query_session_session$$.user_created!=$cached_skip_user_created$$)return null;$cached_skip_user_created$$=(Number($page$$||0)-1)*Number($limit$$||0); $cached_skip_user_created$$<0&&($cached_skip_user_created$$=0);$cached_skip_user_created$$=await global.getModel("cacheDataReport").find({id_session:$id_session_total$$}).limit($limit$$).skip($cached_skip_user_created$$).lean();$id_session_total$$=$limit$$?await global.getModel("cacheDataReport").countDocuments({id_session:$id_session_total$$}):$cached_skip_user_created$$.length;return{...($key$jscomp$20_query_session_session$$.info||{}),id_session:$key$jscomp$20_query_session_session$$._id.toString(), data:$cached_skip_user_created$$.map($c$$=>$c$$.row),pagination:{total:$id_session_total$$,page:$page$$,limit:$limit$$,totalPages:$limit$$?Math.ceil($id_session_total$$/$limit$$):0}}};