UNPKG

flexbiz-server

Version:

Flexible Server

22 lines (21 loc) 10.7 kB
const model=global.getModel("introducer"),introducecode=global.getModel("introducecode"),app=global.getModel("app"),controller=require("../../controllers/controller"),blockchainconnect=require("../../libs/blockchainconnect"),asskey=global.getModel("asskey"),_=require("underscore"),{isSupperAdmin}=require("../../libs/utils"),async=require("async"),Usergroup=global.getModel("usergroup"),Participant=global.getModel("participant"),numeral=require("numeral"),spend=async($appInfo$$,$receiver_user$$,$receiver_address$$, $amount$$,$denom$$,$memo$$,$introduce_code$$,$sub_action$$="")=>{try{await blockchainconnect.spend($appInfo$$._id,$appInfo$$.wallet_token,$appInfo$$.wallet_address,$receiver_address$$,{amount:$amount$$,denom:$denom$$,memo:$memo$$,event:"BONUS-INTRODUCE",introduce_code:$introduce_code$$,sub_action:$sub_action$$})}catch($e$$){Logger.error("[introducer][spend] Error send coin",$e$$,$receiver_user$$,$receiver_address$$,$amount$$,$denom$$,$memo$$)}},bonus=async($obj$$,$code$$)=>{if($obj$$.introduce_code&& ($code$$||=await introducecode.findOne({id_app:$obj$$.id_app,introduce_code:$obj$$.introduce_code}),$code$$)){let $be_introduced_by_user$$=await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced_by}).lean();if($be_introduced_by_user$$&&await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced}).lean()){var $appInfo$$=await app.findOne({_id:$obj$$.id_app}).lean();$appInfo$$.wallet_address&&$appInfo$$.wallet_token&&await new Promise($res$$=>{async.series({introducer:async()=> {try{let $usergroup$$,$tang_gioi_thieu_denom$$;$be_introduced_by_user$$.group_id&&($usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,_id:$be_introduced_by_user$$.group_id}).lean());$usergroup$$||={};if($tang_gioi_thieu_denom$$=$usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom){var $tang_gioi_thieu$$=$usergroup$$.tang_gioi_thieu||$appInfo$$.tang_gioi_thieu||0,$tang_gioi_thieu_pt$$=$usergroup$$.tang_gioi_thieu_pt||$appInfo$$.tang_gioi_thieu_pt||0;if($tang_gioi_thieu$$){let $wallet_address_receive_reward$$= $code$$.wallet_address_receive_reward;if(!$wallet_address_receive_reward$$){let $wallet_be_introduced_by$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced_by,wallet_type:8});$wallet_be_introduced_by$$||=await global.getModel("asskey").createWallet($obj$$.id_app,$obj$$.be_introduced_by,"T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng",8);$wallet_address_receive_reward$$=$wallet_be_introduced_by$$.address}if($wallet_address_receive_reward$$){let $memo$$=`${$appInfo$$.short_name|| $appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 gi\u1edbi thi\u1ec7u Nh\u00e0 \u0111\u1ea7u t\u01b0 m\u1edbi!`;await spend($appInfo$$,$obj$$.be_introduced_by,$wallet_address_receive_reward$$,$tang_gioi_thieu$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"1")}}if($tang_gioi_thieu_pt$$&&$usergroup$$.phu_trach&&$usergroup$$.phu_trach!==$obj$$.be_introduced_by){let $wallet_be_introduced_by$$=await asskey.findOne({id_app:$appInfo$$._id.toString(), username:$usergroup$$.phu_trach,wallet_type:8});$wallet_be_introduced_by$$||=await global.getModel("asskey").createWallet($obj$$.id_app,$usergroup$$.phu_trach,"T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng",8);let $wallet_address_receive_reward$$=$wallet_be_introduced_by$$.address;if($wallet_address_receive_reward$$){let $memo$$=`${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu_pt$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec c\u00f3 th\u00e0nh vi\u00ean trong nh\u00f3m b\u1ea1n qu\u1ea3n l\u00fd t\u00ecm \u0111\u01b0\u1ee3c kh\u00e1ch h\u00e0ng m\u1edbi!`; await spend($appInfo$$,$usergroup$$.phu_trach,$wallet_address_receive_reward$$,$tang_gioi_thieu_pt$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"1")}}}}catch($e$$){Logger.error("[introducer][bonus]",$e$$)}},be_introduce:async()=>{try{let $usergroup$$,$tang_gioi_thieu_denom$$;const $par$$=await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced_by}).lean();$par$$&&$par$$.group_id&&($usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,_id:$par$$.group_id}).lean()); $usergroup$$||={};if($tang_gioi_thieu_denom$$=$usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom){var $tang_duoc_gioi_thieu$$=$usergroup$$.tang_duoc_gioi_thieu||$appInfo$$.tang_duoc_gioi_thieu||0;if($tang_duoc_gioi_thieu$$){var $wallet_be_introduced$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced,wallet_type:8});$wallet_be_introduced$$||=await global.getModel("asskey").createWallet($obj$$.id_app,$obj$$.be_introduced,"T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng", 8);var $memo$$=`${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_duoc_gioi_thieu$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng t\u00e0i kho\u1ea3n!`;await spend($appInfo$$,$obj$$.be_introduced,$wallet_be_introduced$$.address,$tang_duoc_gioi_thieu$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"2")}}}catch($e$$){Logger.error("[introducer][bonus]",$e$$)}}},$e$$=>{$e$$&&Logger.error($e$$); $res$$()})})}}},introducer=function($router$$){(new controller($router$$,model,"introducer",{sort:{date_created:-1},unique:["be_introduced"],notNeedRight:!0,onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:$item$$=>({username:$item$$.be_introduced,wallet_type:1}),fields:[{be_introduced_address:"address"}]});await $items$$.asyncJoinModel2($user$$.current_id_app,"participant",{where:{be_introduced_by:"email"},fields:["group_id"]});await $items$$.filter($r$$=> $r$$.group_id).asyncJoinModel2($user$$.current_id_app,"usergroup",{where:{group_id:"_id"},fields:["group_name"]});await $items$$.asyncJoinModel2(null,"user",{where:{be_introduced_by:"email"},fields:[{be_introduced_by_name:"name"}]});async.mapLimit($items$$,20,($item$$,$callback$$)=>{if($item$$.bonus_paid>0)return $callback$$(null,$item$$);setImmediate(async()=>{try{let $rs$$=await global.getModel("asstransaction").find({id_app:$item$$.id_app,event:"BONUS-INTRODUCE","data.introduce_code":$item$$.introduce_code}).lean(); $rs$$.forEach($r$$=>{$r$$.receiver=($r$$.data||{}).to_address;$r$$.amount=($r$$.data||{}).amount||0});await $rs$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:{receiver:"address"},fields:["username"]});$item$$.bonus_paid=$rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if($item$$.bonus_paid===0)isSupperAdmin($user$$.email.toLowerCase());else{let $rs$$=await model.updateOne({_id:$item$$._id},{bonus_paid:$item$$.bonus_paid}); Logger.info("save bonus_paid",$item$$.bonus_paid,$rs$$)}}catch($e$$){Logger.error($e$$)}$callback$$(null,$item$$)})},()=>{$next$$(null,$items$$)})},onCreating:async($code$jscomp$2_user$$,$obj$$,$next$$,$options$$={})=>{$obj$$.be_introduced=$options$$.action==="import"&&$obj$$.user_created?$obj$$.user_created:$code$jscomp$2_user$$.email;$code$jscomp$2_user$$=await introducecode.findOne({id_app:$code$jscomp$2_user$$.current_id_app,introduce_code:$obj$$.introduce_code}).lean();if(!$code$jscomp$2_user$$)return $next$$("M\u00e3 gi\u1edbi thi\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"); $obj$$.be_introduced_by=$code$jscomp$2_user$$.user_created;if($obj$$.be_introduced_by==$obj$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p c\u1eadp nh\u1eadt th\u00f4ng tin n\u00e0y");$data$$.be_introduced= $obj$$.be_introduced;$data$$.be_introduced_by=$obj$$.be_introduced_by;$data$$.introduce_code=$obj$$.introduce_code;if($data$$.be_introduced_by==$data$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");$next$$(null,$data$$,$obj$$)},onDeleting:($user$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y"); $next$$(null,$obj$$)},onCreated:async($code$jscomp$3_user$$,$obj$$,$next$$)=>{$code$jscomp$3_user$$=await introducecode.findOne({id_app:$obj$$.id_app,introduce_code:$obj$$.introduce_code});if(!$code$jscomp$3_user$$)return $next$$(null,$obj$$);$code$jscomp$3_user$$.so_lan_su_dung=($code$jscomp$3_user$$.so_lan_su_dung||0)+1;await $code$jscomp$3_user$$.save();var $cust_kho_npp$$=await global.getModel("dmkho").findOne({id_app:$obj$$.id_app,la_kho_npp:!0,$or:[{user_npp:$obj$$.be_introduced_by},{ds_ctv_npp:$obj$$.be_introduced_by}]}).lean(); $cust_kho_npp$$?await global.getModel("customer").updateOne({id_app:$obj$$.id_app,of_user:$obj$$.be_introduced},{ma_kho_npp:$cust_kho_npp$$.ma_kho}):($cust_kho_npp$$=await global.getModel("customer").findOne({id_app:$obj$$.id_app,of_user:$obj$$.be_introduced_by},{ma_kho_npp:1}).lean())&&$cust_kho_npp$$.ma_kho_npp&&await global.getModel("customer").updateOne({id_app:$obj$$.id_app,of_user:$obj$$.be_introduced},{ma_kho_npp:$cust_kho_npp$$.ma_kho_npp});try{await bonus($obj$$,$code$jscomp$3_user$$)}catch($e$$){Logger.error("[introducer][onCreated]", "Error handle to introduce",$e$$)}$next$$(null,$obj$$)},onUpdated:async($user$$,$item$$,$next$$)=>{try{let $rs$$=await global.getModel("asstransaction").find({id_app:$item$$.id_app,event:"BONUS-INTRODUCE","data.introduce_code":$item$$.introduce_code}).lean();$rs$$.forEach($r$$=>{$r$$.receiver=($r$$.data||{}).to_address;$r$$.amount=($r$$.data||{}).amount||0});await $rs$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:{receiver:"address"},fields:["username"]});$item$$.bonus_paid=$rs$$.filter($r$$=> $r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0);await $rs$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:{receiver:"address"},fields:["username"]});if($rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0)>0)return $next$$(null,$item$$);(new Date($item$$.date_created)).getTime()>=(new Date(2022,9,1)).getTime()&&await bonus($item$$)}catch($e$$){Logger.error("[introducer][onUpdated]", "error update introducer",$e$$)}$next$$(null,$item$$)}})).route()};module.exports=introducer;