UNPKG

flexbiz-server

Version:

Flexible Server

13 lines (12 loc) 5.97 kB
const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,executeInTransaction}=require("../libs/sessionContext.js"),{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"}); let $obj$$=await $model$$.findOne({_id:$_id$$});if(!$obj$$)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$$.toObject().listinfo_code||$ctrl$$.name;if($listinfo_code$$&&$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}async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$$.trang_thai){var $q_approve_requireOtp$$={id_app:$obj$$.id_app,id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}};if(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$$.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$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.BOOK_LOCK})}$obj$$= convertObjectIdsToStrings($obj$$.toObject());($q_approve_requireOtp$$=$ctrl$$.options.requireOtp)&&_.isFunction($q_approve_requireOtp$$)&&($q_approve_requireOtp$$=$q_approve_requireOtp$$($obj$$,{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$$});permission.hasRight($ctrl$$.require_id_app?$obj$$.id_app:void 0,$req$$.user.email,$module$$,"delete",function($error$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $callback$$({error:ERRORS.ERR_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE});$req$$.obj=$obj$$;$callback$$()});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})}, {obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})})},function($callback$$){let $obj$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.error("deleting",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$, req:$req$$}):($req$$.obj=$obj$$,$callback$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$$,$callback$$())},function($callback$$){let $obj$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$$});deletePost($req$$.user,$obj$$,async $e$$=>{if($e$$)return Logger.error("delete post",$e$$),$e$$.error?$callback$$($e$$): $callback$$({error:$e$$.message||$e$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$$._id},function($e$$){if($e$$)return Logger.error("delete object",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});onAfterCommit(()=>{$ctrl$$.emit("deleted",$obj$$);$ctrl$$.deleteData({...$obj$$});global.getModel("log").create({id_app:$req$$.user.current_id_app, id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$$._id,data:$obj$$}},$req$$.user.email,$req$$.user_agent,$req$$);global.getModel("link").deleteMany({$or:[{id_a:$obj$$._id},{id_b:$obj$$._id}]},function($e$$){$e$$&&Logger.error("Can't delete links\n"+$e$$)});global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj$$);runWebhooks($ctrl$$,$obj$$,"DELETE");pushNotification($ctrl$$,$obj$$,"delete",null,null,{exclude_token:$req$$.query.access_token})});setImmediate(()=> {$ctrl$$.deleted?$ctrl$$.deleted($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.error("deleted",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$obj$$;$callback$$(null)}):($req$$.obj=$obj$$,$callback$$(null))})})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})},deleteHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{deleteHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}), withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(()=>deleteHandlerAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;