flexbiz-server
Version:
Flexible Server
42 lines (41 loc) • 21 kB
JavaScript
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"),{onAfterCommit,executeInTransaction}=require("../libs/sessionContext.js"),{ERRORS,isExists,createIdRef,checkReference,fields_sync_master_detail,postData,getNextSequence,runWebhooks,
cleanDataByMongooseSchema,deletePost}=require("./controllerUtils"),updateHandler=async function($ctrl$$,$req$$,$callback$$){let {user:$user$$,id:$id$$,data:$data$$,action:$action$$,_action:$_action$$}=$req$$;$_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=($req$$.cookies||{}).uid);Logger.info("[updateHanlder] t\u00ecm object ddeer update...");const $obj$$=await $model$$.findById($id$$).inTxn();if(!$obj$$)return Logger.error("[updateHanlder] not found object",$model$$.modelName,$id$$),$callback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$data$$.listinfo_code=$obj$$.toObject().listinfo_code||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.query=$req$$.query||
{};Logger.info("[updateHanlder] x\u1eed l\u00fd d\u1eef li\u1ec7u...");let $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||$req$$.query["listinfo-code"]||$data$$.listinfo_code,$voucher_options$$;if($listinfo_code$$){if($listinfo_code$$!=$ctrl$$.name){const $listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$listinfo$$?($listinfo$$.api_code||$listinfo$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=
$ctrl$$.name}$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$$;Logger.info("[updateHanlder] ki\u1ec3m tra recaptcha...");if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$data$$["g-recaptcha-response"])return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");
try{await permission.verifyReCaptcha($data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}}Logger.info("[updateHanlder] Ki\u1ec3m tra verify otp...");let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($data$$,{action:$_action$$,_id:$id$$,user:$user$$}));if($requireOtp$$&&$_action$$!=="import")try{await permission.verifyOTP($user$$.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||
$e$$.error||$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&&$voucher_options$$?.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,so_ct:$data$$.so_ct,listinfo_code:$listinfo_code$$||$ctrl$$.name,_id:{$ne:$obj$$._id.toString()}},$tu_ngay$$;var $date_check_den_ngay$$=$data$$.ngay_ct||$obj$$.ngay_ct;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=
moment($date_check_den_ngay$$).startOf("date").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("date").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "2":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("month").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "3":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("quarter").toDate();
$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "8":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$date_check_den_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{setImmediate(()=>{if($rs$$)return $callback$$("S\u1ed1 ch\u1ee9ng t\u1eeb "+
$data$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c");$callback$$(null,$obj$$)})}).catch($e$$=>{Logger.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$$.trang_thai){var $old_obj_old_request_q_approve$$={id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}};$old_obj_old_request_q_approve$$.trang_thai=
($data$$.trang_thai||$obj$$.trang_thai||"").toString();if(($old_obj_old_request_q_approve$$=await global.getModel("approve").findOne($old_obj_old_request_q_approve$$))&&$old_obj_old_request_q_approve$$.update_after_approve?.cho_phep_cap_nhat_khi_da_duyet!=1)return $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")}Logger.info("[updateHanlder] ki\u1ec3m tra kho\u00e1 s\u1ed5...");if($obj$$.ngay_ct&&
$obj$$.id_app&&$obj$$.schema&&$obj$$.schema.validate&&$obj$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,$rj$$)=>{validator.unlockBook[0]($obj$$.id_app,$obj$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.exfields&&($obj$$.exfields=$obj$$.exfields||{});$old_obj_old_request_q_approve$$=convertObjectIdsToStrings($obj$$.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$$)$data_keys$$.indexOf($key$$)<0&&($data$$[$key$$]=$old_obj_old_request_q_approve$$[$key$$]);$callback$$(null,$obj$$)})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] ki\u1ec3m tra quy\u1ec1n truy c\u1eadp...");setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$_action$$,data:$data$$,obj:$current_obj$$});async.series({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$$})},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$$})}},$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||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($current_trang_thai$$)>=0)&&$model$$.schema.paths.so_ct)if($current_so_ct$$&&$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,$count$$<100)},function($callbackWhilst$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){setImmediate(()=>{if($e$$)return $callbackWhilst$$($e$$);$data$$.so_ct=$rs$$.so_ct;$checkSoCT$$($obj$$,$error$$=>{$error$$?$count$$>=99?$callbackWhilst$$($error$$):
($count$$++,$callbackWhilst$$()):($count$$=99999,$callbackWhilst$$())})})},{...($obj$$.toObject?$obj$$.toObject():$obj$$),...$data$$})},function($err$$){$_callback$$($err$$,$obj$$)})}else $_callback$$(null,$obj$$)})},$checkSoCT$$,($obj$$,$_callback$$)=>{(async($obj$$,$callback$$)=>{try{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $data$$[$f$$]})}catch($e$$){Logger.error("Error get field not right",$e$$)}setImmediate(function(){$ctrl$$.updating?
$ctrl$$.updating($user$$,$data$$,$obj$$,function($error$$,$_data$$,$_obj$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);if($ctrl$$.dynamicUpdating)$ctrl$$.dynamicUpdating($user$$,$_data$$,$_obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$});else{for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);
$callback$$(null,$obj$$)}})}):$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$$,($err$$,$next$$)=>{$_callback$$($err$$,$next$$)})},function($obj$$,$callback$$){Logger.info("[updateHanlder] ki\u1ec3m tra s\u1ef1 t\u1ed3n t\u1ea1i...");
setImmediate(function(){if(!$unique$$||$unique$$.length===0)return $callback$$(null,$obj$$);let $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$$]?($ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="number"?$c2$$[$key$$]=Number($data$$[$key$$]):$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="date"?$c2$$[$key$$]=new Date($data$$[$key$$]):
$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="string"?$c2$$[$key$$]=($data$$[$key$$]||"").toString():$c2$$[$key$$]=$data$$[$key$$],$c2$$[$key$$]||($c2$$[$key$$]=$c1$$[$key$$])):Logger.error("[updateHanlder] field",$key$$," is not exist. please check unique of controller")});_.isEqual($c1$$,$c2$$)!==!0?isExists($model$$,$unique$$,$c2$$,$ctrl$$.replaceIfExists,function($error$$,$kq$$){setImmediate(()=>{if($error$$||$kq$$){let $msgError$$=$error$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,
$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}else checkReference($model$$,$obj$$,function($error$$){setImmediate(()=>{if($error$$)return Logger.error("[updateHandler] Keys arise data",$c1$$,$c2$$,$error$$,$unique$$),$callback$$({error:ERRORS.ERR_KEY_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_KEY_ARISE_CODE,unique:$unique$$});$callback$$(null,$obj$$)})},$unique$$)})}):$callback$$(null,$obj$$)})},
function($obj$$,$_callback$$){const $callback$$=($err$$,$next$$)=>{$_callback$$($err$$,$next$$)};let $keys$$=Object.keys($model$$.referenceKeys||{}).filter($key$$=>$key$$!=="_id");$unique$$&&($keys$$=$keys$$.filter($key$$=>$unique$$.indexOf($key$$).length<0));$keys$$.length===0?$_callback$$(null,$obj$$):checkReference($model$$,$obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+
"\n"+$e$$);$_callback$$($msgError$$,void 0)},$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$$,$_callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$data$$,$next$$)=>{$next$$(null,$data$$)});$data$$=cleanDataByMongooseSchema($data$$,$model$$.schema);$data$$._id=$obj$$._id;$ctrl$$.validating($user$$,$data$$,($error$$,$data$$)=>{$error$$?$_callback$$($error$$,
void 0):($data$$.date_updated=new Date,$data$$.user_updated=$user$$.email,delete $data$$.__v,$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()}),$ctrl$$.options.onUpdateExtending($obj$$,$data$$,$action$$,function(){$schema_paths$$.exfields&&$data$$.exfields&&($obj$$.exfields=$data$$.exfields);delete $data$$.__v;for(let $f$$ in $data$$)$schema_paths$$[$f$$]&&$f$$!=="_id"&&($obj$$.set($f$$,$data$$[$f$$]),$f$$!=="exfields"||$obj$$.exfields||
($obj$$.exfields={}));validate($obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else $_callback$$(null,$obj$$)})},$voucher_options$$)}))},{action:$action$$})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] xo\u00e1 s\u1ed5 s\u00e1ch...");$current_obj$$&&($obj$$._id=
$current_obj$$._id);deletePost($user$$,$obj$$,async $e$$=>{if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){Logger.error("[updatehandler] [deleteBooks] [dynamicDeletePost]",$e$$);$_callback$$($e$$,void 0);return}$_callback$$($e$$,$obj$$)})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] L\u01b0u t\u1edbi database...");const $callback$$=($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$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=
0).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);let $obj_created$$,$error$$;$data$$.$condition&&($$condition_k$$=$data$$.$condition,$$condition_k$$._id=
$obj$$._id,await $model$$.findOne($$condition_k$$)||($error$$=ERRORS.ERR_CAN_NOT_UPDATE),delete $data$$.$condition);if(!$error$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save(),$ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=await $ctrl$$.populate($obj_created$$))}catch($e$$){if($error$$=$e$$,$ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$_action$$)}if($error$$){let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);
$msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorUpdating",$e$$);$_callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE},void 0)},$current_obj$$);else $callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE})}else postData($obj_created$$,$ctrl$$,function($msgError$$){if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,
$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$,$current_obj$$);$ctrl$$.emit("updated",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);runWebhooks($ctrl$$,$obj_created_cv$$,
$_action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$_action$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$_action$$.toUpperCase(),data:{oldData:$current_obj$$,newData:$data$$,id:$obj$$._id.toString()}},$user$$.email,$req$$.user_agent,$req$$)})});$_callback$$(null,$obj_created_cv$$)}},{req:$req$$})})},function($obj$$,$callback$$){Logger.info("[updateHanlder] X\u1eed l\u00fd sau khi updated...");
$ctrl$$.updated?$ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){if($error$$)return Logger.error("[updateHandler] [saved] error when saved",$error$$),$callback$$($error$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,
$obj$$)}):$callback$$(null,$obj$$)},function($obj$$,$callback$$){Logger.info("[updateHanlder] requestApprove...");$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){Logger.info("[updateHanlder] T\u1ea1o view...");setImmediate(async()=>{let $approve_data$$;$obj$$.trang_thai!=void 0&&($approve_data$$=await global.getModel("approve").findOne({id_ct:$obj_created_cv$$._id.toString(),"update_after_approve.data.trang_thai":$obj_created_cv$$.trang_thai.toString()}).lean(),
!$approve_data$$||$approve_data$$.user_approved||$approve_data$$.user_denied?$approve_data$$=null:($approve_data$$.user_approved=$req$$.user.email,$approve_data$$.user_approved_name=$req$$.user.name,$approve_data$$.date_approved=new Date,await global.getModel("approve").updateOne({_id:$approve_data$$._id},$approve_data$$)));$req$$&&$_action$$!="import"&&$req$$.query.return_data!==!1?($obj_created_cv$$.collection_name=$ctrl$$.collection_name,(await permission.getFieldNotRight($obj_created_cv$$.id_app,
$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj_created_cv$$[$f$$]}),$ctrl$$.onView($user$$,[$obj_created_cv$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$approve_data$$&&onAfterCommit(async()=>{global.getModel("approve").sendNotifyApproved($approve_data$$,$req$$.query.access_token);let $channel$$=`${$ctrl$$.name.toLowerCase()}-${"request_approved"}`;$obj$$.id_app&&($channel$$=`${$channel$$}-${$obj$$.id_app}`);let $message$$=JSON.stringify($viewValue$$[0]);
try{await global.clientRedis.publish($channel$$,$message$$)}catch($e$$){Logger.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}});$callback$$(null,$viewValue$$[0])})},{req:$req$$})):(Logger.info("[updateHanlder] tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 sau khi import..."),$callback$$(null,{_id:$obj_created_cv$$._id}))})}],($e$$,$rs$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],
$callback$$(null,{new_obj:$rs$$,old_obj:$current_obj$$}))})}catch($e$$){Logger.error("[updateHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},updateHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{updateHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>updateHandlerAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};
module.exports=withSesssion;module.exports.updateHandler=updateHandler;