UNPKG

flexbiz-server

Version:

Flexible Server

15 lines (14 loc) 7.43 kB
const _=require("lodash"),permission=require("../libs/permission"),updateKeyHanlder=($ctrl$$,$req$$,$callback$$)=>{let $model$$=$ctrl$$.model,$_id$$=$req$$.params._id;if(!mongoose.Types.ObjectId.isValid($_id$$))return $callback$$({error:"_id c\u1ee7a \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y kh\u00f4ng h\u1ee3p l\u1ec7"});let $field$$=$req$$.params.field;if($field$$=="_id")return $callback$$({error:"Kh\u00f4ng th\u1ec3 \u0111\u1ed5i tr\u01b0\u1eddng _id"});if(!_.has($model$$.schema.paths,$field$$))return $callback$$({error:"Model n\u00e0y kh\u00f4ng c\u00f3 tr\u01b0\u1eddng "+ $field$$});if(!_.has($model$$.schema.paths,"id_app"))return $callback$$({error:"Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u model c\u1ea7n ph\u1ea3i c\u00f3 id_app field"});let $new_value$$=$req$$.params.new_value.trim().toUpperCase(),$id_app$$=$req$$.user.current_id_app;permission.isAdmin($req$$.user.current_id_app,$req$$.user.email,function($e$$,$admin$$){setImmediate(async()=>{if($e$$)return $callback$$({error:$e$$.error||$e$$,code:$e$$.code});if(!$admin$$)return $callback$$({error:"B\u1ea1n ph\u1ea3i c\u00f3 quy\u1ec1n admin \u0111\u1ec3 th\u1ef1c hi\u1ec7n t\u00ednh n\u0103ng n\u00e0y"}); var $data_type$jscomp$1_obj$$=await $model$$.findOne({id_app:$id_app$$,_id:$_id$$}).lean();if(!$data_type$jscomp$1_obj$$)return $callback$$({error:"\u0110\u1ed1i t\u01b0\u1ee3ng n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"});if($ctrl$$.model_name=="account"&&$data_type$jscomp$1_obj$$.loai_tk!=1)return $callback$$({error:"Ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u1ed5i t\u00e0i kho\u1ea3n con"});const $old_value$$=$data_type$jscomp$1_obj$$[$field$$];var $_ref_model$$={id_app:$id_app$$,[$field$$]:$new_value$$, _id:{$ne:$_id$$}};const $deletedItems$$=await $model$$.find($_ref_model$$).lean();if($ctrl$$.model_name=="account"&&$deletedItems$$.find($a$$=>$a$$.loai_tk!=1))return $callback$$({error:"Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u1ed5i ho\u1eb7c g\u1ed9p v\u00e0o t\u00e0i kho\u1ea3n m\u1eb9"});$deletedItems$$.forEach($item$$=>{$ctrl$$.deleteData({...$item$$})});await $model$$.deleteMany($_ref_model$$);const $user_update$$={date_updated:new Date,user_updated:$req$$.user.email};$new_value$$!== $data_type$jscomp$1_obj$$[$field$$]&&await $model$$.updateOne({_id:$_id$$},{[$field$$]:$new_value$$,...$user_update$$});$data_type$jscomp$1_obj$$[$field$$]=$new_value$$;await $ctrl$$.cacheData($data_type$jscomp$1_obj$$);Object.values(mongoose.models).filter($m$$=>_.has($m$$.schema.paths,$field$$)&&$m$$.collection.name!=$model$$.collection.name).forEach($_ref_model$$=>{$_ref_model$$.updateMany({[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$,...$user_update$$}).then($rs$$=>{Logger.info("[updateKey] update gia tri moi cho cac model", $_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"result",$rs$$)}).catch($e$$=>{Logger.error("[updateKey] update gia tri moi cho cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)})});const $model_name$$=$ctrl$$.model_name;$_ref_model$$=await global.getModel("listinfo").find({"fields.ref_model":$model_name$$,"fields.ref_field":{$in:["_id",$field$$]}}).lean();for(let $l$$ of $_ref_model$$)if($_ref_model$$= mongoose.models[$l$$.model_code||$l$$.api_code||$l$$.code]){for(let $f$$ of $l$$.fields.filter($f$$=>$f$$.ref_model==$model_name$$&&$f$$.ref_field==$field$$))if(_.has($_ref_model$$.schema.paths,$f$$.name))try{await $_ref_model$$.updateMany({[$f$$.name]:$data_type$jscomp$1_obj$$[$f$$.ref_field],id_app:$id_app$$},{[$f$$.name]:$new_value$$,...$user_update$$})}catch($e$$){Logger.error("[updateKey] update gia tri moi cho cac model",$_ref_model$$.collection.name,{[$f$$.name]:$data_type$jscomp$1_obj$$[$f$$.ref_field], id_app:$id_app$$},{[$f$$.name]:$new_value$$},"error",$e$$)}for(let $f$$ of $l$$.fields.filter($f$$=>$f$$.ref_model==$model_name$$&&$f$$.ref_field=="_id"))if(_.has($_ref_model$$.schema.paths,$f$$.name))for(let $deleted$$ of $deletedItems$$)try{await $_ref_model$$.updateMany({[$f$$.name]:$deleted$$._id.toString(),id_app:$id_app$$},{[$f$$.name]:$data_type$jscomp$1_obj$$._id.toString(),...$user_update$$})}catch($e$$){Logger.error("[updateKey] update gia tri moi cho cac model",$_ref_model$$.collection.name, {[$f$$.name]:$deleted$$._id.toString(),id_app:$id_app$$},{[$f$$.name]:$data_type$jscomp$1_obj$$._id.toString()},"error",$e$$)}}else{$_ref_model$$=await global.getModel("listinfo").find({"fields.form":$l$$.code}).lean();for(let $parent$$ of $_ref_model$$){$_ref_model$$=mongoose.models[$parent$$.model_code||$parent$$.api_code||$parent$$.code];let $field_of_parent$$=($parent$$.fields||[]).find($f$$=>$f$$.form==$l$$.code);if($_ref_model$$&&$field_of_parent$$&&_.has($_ref_model$$.schema.paths,$field_of_parent$$.name)&& ["array","mixed","object"].indexOf($_ref_model$$.schema.paths[$field_of_parent$$.name].instance.toLowerCase())>=0){var $key$$=$l$$.fields.filter($f$$=>$f$$.ref_model==$model_name$$&&$f$$.ref_field==$field$$);for(let $subField$$ of $key$$){var $data_type_key_value$$=$_ref_model$$.schema.paths[$field_of_parent$$.name].instance.toLowerCase();$key$$=`${$field_of_parent$$.name}.${$subField$$.name}`;$data_type_key_value$$=$data_type_key_value$$=="array"?`${$field_of_parent$$.name}.$.${$subField$$.name}`: $key$$;try{let $rs$$=await $_ref_model$$.updateMany({[$key$$]:$old_value$$,id_app:$id_app$$},{[$data_type_key_value$$]:$new_value$$,...$user_update$$});Logger.info(`[updateKey] update cho ${$_ref_model$$.modelName}:`,{[$key$$]:$old_value$$,[$data_type_key_value$$]:$new_value$$},$rs$$)}catch($e$$){Logger.error(`[updateKey] update cho ${$_ref_model$$.modelName}:${$key$$}`,$e$$)}}}}}for(let $_ref_model$$ of Object.values(mongoose.models).filter($m$$=>$m$$.collection.name!=$model$$.collection.name))for(let $key$$ in $_ref_model$$.schema.paths){$data_type$jscomp$1_obj$$= $_ref_model$$.schema.paths[$key$$].instance.toLowerCase();if($data_type$jscomp$1_obj$$=="array")try{await $_ref_model$$.updateMany({[`${$key$$}.${$field$$}`]:$old_value$$,id_app:$id_app$$},{[`${$key$$}.$.${$field$$}`]:$new_value$$,...$user_update$$})}catch($e$$){Logger.error("[updateKey] update gia tri moi cho subdocument",$key$$,"type",$data_type$jscomp$1_obj$$,"cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)}if($data_type$jscomp$1_obj$$== "object"||$data_type$jscomp$1_obj$$=="mixed")try{await $_ref_model$$.updateMany({[`${$key$$}.${$field$$}`]:$old_value$$,id_app:$id_app$$},{[`${$key$$}.${$field$$}`]:$new_value$$,...$user_update$$})}catch($e$$){Logger.error("[updateKey] update gia tri moi cho subdocument",$key$$,"type",$data_type$jscomp$1_obj$$,"cac model",$_ref_model$$.collection.name,{[$field$$]:$old_value$$,id_app:$id_app$$},{[$field$$]:$new_value$$},"error",$e$$)}}$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"})})})}, {executeInTransaction}=require("../libs/sessionContext.js"),updateKeyHanlderAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{updateKeyHanlder($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>updateKeyHanlderAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;