UNPKG

flexbiz-server

Version:

Flexible Server

22 lines (21 loc) 9.02 kB
const validator=require("validator"),utils=require("../libs/utils"),participantScheam=new global.Schema({id_app:{type:String,required:!0,maxlength:1024},email:{type:String,required:!0,lowercase:!0,maxlength:128,trim:!0},phone:{type:String,lowercase:!0,maxlength:128,trim:!0},name:{type:String,maxlength:1024},admin:{type:Boolean,default:!1},active:{type:Boolean,default:!1},cancel:{type:Boolean,default:!1},auto_create_user:{type:Boolean,default:!0},group_id:{type:String,maxlength:1024,ref:"usergroup", localField:["group_id"],foreignField:["_id"]},password:{type:String,maxlength:1024},hotline:{type:String,maxlength:1024},ext:{type:String,maxlength:1024},exts:[String],signature_image:String,session_created:String,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},user_created:{type:String,default:""},date_updated:{type:Date,default:Date.now},user_updated:{type:String,default:""}}); (global.configs||{}).createIndexes&&(participantScheam.index({id_app:1}),participantScheam.index({id_app:1,email:1},{unique:!0}),participantScheam.index({id_app:1,phone:1,email:1,name:1,status:1}),participantScheam.index({id_app:1,admin:1}),participantScheam.index({session_created:1}),participantScheam.index({id_app:1,group_id:1}),participantScheam.index({id_app:1,ext:1,exts:1,hotline:1}),participantScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}),participantScheam.index({id_app:1, user_created:1,visible_to:1,visible_to_users:1,email:1,name:1}),participantScheam.index({id_app:1,email:"text",name:"text",ext:"text"})); participantScheam.pre("save",async function($next$$){if(this.email==="public"&&this.admin)return $next$$("T\u00e0i kho\u1ea3n public kh\u00f4ng th\u1ec3 l\u00e0 qu\u1ea3n tr\u1ecb vi\u00ean");if(!this.admin&&!{}.is_employee_group){const $app$$=await global.getModel("app").findOne({_id:this.id_app}).lean();if(!$app$$)return $next$$("id_app is not valid");if($app$$.account_types_accept&&$app$$.account_types_accept.length>0){if($app$$.account_types_accept.indexOf("email")<0&&validator.isEmail(this.email))return $next$$(`T\u00e0i kho\u1ea3n kh\u00f4ng \u0111\u01b0\u1ee3c l\u00e0 \u0111\u1ecba ch\u1ec9 email: ${this.email}`); if($app$$.account_types_accept.indexOf("phone")<0&&utils.isMobilePhone(this.email,["vi-VN"]))return $next$$(`T\u00e0i kho\u1ea3n kh\u00f4ng \u0111\u01b0\u1ee3c l\u00e0 m\u1ed9t s\u1ed1 \u0111i\u1ec7n tho\u1ea1i: ${this.email}`)}}this.exts=(this.ext||"").split(",");$next$$()});const model=global.mongoose.models.participant||global.mongoose.model("participant",participantScheam); model.ofApp=async($id_app$$,$email$$)=>{let $condition$$={id_app:$id_app$$};$email$$&&($condition$$.email=$email$$);return new Promise(($resolve$$,$reject$$)=>{model.find($condition$$).lean().then($rs$$=>{$resolve$$($rs$$)}).catch($e$$=>{$reject$$(Error($e$$.message))})})};model.appsOfUser=async $email$$=>model.find({email:$email$$}).lean(); model.createParticipant=async($data$$,$callback$$)=>{$data$$.name=$data$$.name||$data$$.email;model.findOne({id_app:$data$$.id_app,email:$data$$.email},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);if($rs$$)return $callback$$(null,$rs$$);Logger.warn("[Participant][createParticipant] \u0111ang t\u1ea1o participant cho",$data$$.email,",cty:",$data$$.id_app,"group:",$data$$.group_id);$data$$.group_id&&global.mongoose.Types.ObjectId.isValid($data$$.group_id)?(Logger.warn("[Participant][createParticipant] \u0111ang t\u00ecm group", $data$$.group_id),$e$$=await global.getModel("usergroup").findOne({id_app:$data$$.id_app,_id:$data$$.group_id,allow_signup:!0}).lean()):(Logger.warn("[Participant][createParticipant] \u0111ang l\u1ea5y m\u1eb7c \u0111\u1ecbnh m\u1ed9t group"),($e$$=await global.getModel("usergroup").findOne({id_app:$data$$.id_app,is_customer_group:!0,default_group:!0}).lean())||($e$$=await global.getModel("usergroup").findOne({id_app:$data$$.id_app,is_customer_group:!0}).lean()));if($e$$)$data$$.active=$e$$.not_need_active!= 0,$data$$.group_id=$e$$._id.toString();else{if(!$data$$.admin)return $callback$$("User group is not valid");$data$$.active=!0}$data$$.password&&($data$$.password=utils.generatePasswordHash($data$$.email+$data$$.password));model.create($data$$,($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})};model.asyncCreateParticipant=async $data$$=>new Promise(($resolve$$,$reject$$)=>{model.createParticipant($data$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}); model.referredUsers=async($id_app$$,$be_introduced_by_level1$$,$level$$=1)=>{$be_introduced_by_level1$$=await global.getModel("introducer").find({id_app:$id_app$$,be_introduced_by:$be_introduced_by_level1$$}).lean();$be_introduced_by_level1$$=$be_introduced_by_level1$$.filter($l$$=>$l$$.be_introduced!=$l$$.be_introduced_by).map($l$$=>({user:$l$$.be_introduced,by:$l$$.be_introduced_by,introduce_code:$l$$.introduce_code,referral_code:$l$$.introduce_code,date:$l$$.date_created,level:$level$$}));if($be_introduced_by_level1$$.lenth== 0)return $be_introduced_by_level1$$;let $level2$$=await Promise.all($be_introduced_by_level1$$.map($intro$$=>model.referredUsers($id_app$$,$intro$$.user,$intro$$.level+1)));return $be_introduced_by_level1$$.concat($level2$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]))}; const referByUsers=async($id_app$$,$be_introduced_level1$$,$level$$=1)=>{$be_introduced_level1$$=await global.getModel("introducer").find({id_app:$id_app$$,be_introduced:$be_introduced_level1$$}).lean();$be_introduced_level1$$=$be_introduced_level1$$.filter($l$$=>$l$$.be_introduced!=$l$$.be_introduced_by).map($l$$=>({user:$l$$.be_introduced,by:$l$$.be_introduced_by,introduce_code:$l$$.introduce_code,referral_code:$l$$.introduce_code,date:$l$$.date_created,level:$level$$}));if($be_introduced_level1$$.lenth== 0)return $be_introduced_level1$$;let $level2$$=await Promise.all($be_introduced_level1$$.map($intro$$=>referByUsers($id_app$$,$intro$$.by,$intro$$.level+1)));return $be_introduced_level1$$.concat($level2$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]))}; model.referByUsers=async($id_app$jscomp$3_rs$$,$be_introduced$$)=>{$id_app$jscomp$3_rs$$=(await referByUsers($id_app$jscomp$3_rs$$,$be_introduced$$)).sort(($a$$,$b$$)=>$b$$.level-$a$$.level);$id_app$jscomp$3_rs$$.forEach(($r$$,$index$$)=>{$r$$.level=$index$$+1});return $id_app$jscomp$3_rs$$}; model.getPar=async($stocks_user$$,$appInfo$$)=>{if(!$appInfo$$||!$appInfo$$._id)return null;var $_ps_par$$=await model.findOne({id_app:$appInfo$$._id,email:$stocks_user$$.email}).lean();if($_ps_par$$){if($_ps_par$$.group_id&&global.mongoose.Types.ObjectId.isValid($_ps_par$$.group_id)){delete $_ps_par$$.password;var $customer_info_group$$=await global.getModel("usergroup").findOne({_id:$_ps_par$$.group_id}).lean();$customer_info_group$$&&($_ps_par$$.group=$customer_info_group$$)}$customer_info_group$$= await global.getModel("customer").findOne({id_app:$appInfo$$._id.toString(),of_user:$stocks_user$$.email},{default_password:0,ghi_chu:0}).lean();if(!$customer_info_group$$){let $cust$$={ten_kh:$stocks_user$$.name,email:$stocks_user$$.email,id_app:$appInfo$$._id,user_created:$stocks_user$$.email,user_updated:$stocks_user$$.email,kh_yn:!0,of_user:$stocks_user$$.email,nh_kh:$_ps_par$$.nh_kh};utils.isMobilePhone($stocks_user$$.email,["vi-VN"])&&($cust$$.dien_thoai=$stocks_user$$.email);try{$customer_info_group$$= await global.getModel("customer").asyncCreateCustomer($cust$$),$customer_info_group$$=$customer_info_group$$.toObject()}catch($e$$){Logger.error("Auto create new customer with error:",$e$$.message)}}$_ps_par$$.customer_info=$customer_info_group$$;$_ps_par$$.employee_info=await global.getModel("dmnv").findOne({id_app:$appInfo$$._id.toString(),user:$stocks_user$$.email},{default_password:0,ghi_chu:0,cong_viec_chi_tiet:0}).lean();$_ps_par$$.stock_info=await global.getModel("dmkho").findOne({id_app:$appInfo$$._id.toString(), user_npp:$stocks_user$$.email,la_kho_npp:!0,status:!0},{ma_kho:1,user_npp:1,la_kho_npp:1}).lean();$_ps_par$$.stock_info||($_ps_par$$.stock_info=await global.getModel("dmkho").findOne({id_app:$appInfo$$._id.toString(),user_cho_thue:$stocks_user$$.email,la_kho_thue:!0,status:!0},{ma_kho:1,user_cho_thue:1,la_kho_thue:1,tk_tien_giu_ho:1}).lean());$_ps_par$$.stock_info||($stocks_user$$=await global.getModel("dmkho").find({status:!0,id_app:$appInfo$$._id.toString(),$or:[{ds_ctv_npp:$stocks_user$$.email, la_kho_npp:!0},{ds_ctv_kho_thue:$stocks_user$$.email,la_kho_thue:!0},{ma_kho:$customer_info_group$$.ma_kho_npp,la_kho_npp:!0}]},{ma_kho:1,ten_kho:1,user_npp:1,la_kho_npp:1,user_cho_thue:1,la_kho_thue:1}).lean(),$stocks_user$$.length==1&&($_ps_par$$.stock_info=$stocks_user$$[0]))}else $_ps_par$$={},$_ps_par$$.admin=$appInfo$$.user_created===$stocks_user$$.email;$_ps_par$$=$_ps_par$$||{};$_ps_par$$.ma_nt=$_ps_par$$.ma_nt||($_ps_par$$.group||{}).ma_nt||"VND";$_ps_par$$.ty_gia=$_ps_par$$.ma_nt==="VND"? 1:(await global.getModel("currency").findOne({id_app:$appInfo$$._id.toString(),ma_nt:$_ps_par$$.ma_nt}).lean()||{}).ty_gia||1;return $_ps_par$$};module.exports=model;