UNPKG

flexbiz-server

Version:

Flexible Server

21 lines (20 loc) 8.89 kB
'use strict';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,email:1},{unique:!0}),participantScheam.index({email:1}),participantScheam.index({email:1,password:1}),participantScheam.index({id_app:1,phone:1}),participantScheam.index({name:1}),participantScheam.index({admin:1}),participantScheam.index({session_created:1}),participantScheam.index({group_id:1}),participantScheam.index({hotline:1}),participantScheam.index({ext:1}),participantScheam.index({exts:1}),participantScheam.index({status:1}), participantScheam.index({user_created:1,visible_to:1,visible_to_users:1}),participantScheam.index({email:"text",name:"text",ext:"text"})); participantScheam.pre("save",async function($next$$){if("public"===this.email&&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&&0<$app$$.account_types_accept.length){if(0>$app$$.account_types_accept.indexOf("email")&&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(0>$app$$.account_types_accept.indexOf("phone")&&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().exec(($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$resolve$$($rs$$)})})};model.appsOfUser=async $email$$=>{let $condition$$={email:$email$$};return new Promise(($resolve$$,$reject$$)=>{model.find($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$resolve$$($rs$$)})})}; model.createParticipant=async($data$$,$callback$$)=>{$data$$.name=$data$$.name||$data$$.email;model.findOne({id_app:$data$$.id_app,email:$data$$.email},async($e$jscomp$0$$,$rs$jscomp$0$$)=>{if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);if($rs$jscomp$0$$)return $callback$$(null,$rs$jscomp$0$$);$data$$.group_id&&global.mongoose.Types.ObjectId.isValid($data$$.group_id)?$e$jscomp$0$$=await global.getModel("usergroup").findOne({id_app:$data$$.id_app,_id:$data$$.group_id,allow_signup:!0}).lean():($e$jscomp$0$$= await global.getModel("usergroup").findOne({id_app:$data$$.id_app,is_customer_group:!0,default_group:!0}).lean())||($e$jscomp$0$$=await global.getModel("usergroup").findOne({id_app:$data$$.id_app,is_customer_group:!0}).lean());if($e$jscomp$0$$)$data$$.active=0!=$e$jscomp$0$$.not_need_active,$data$$.group_id=$e$jscomp$0$$._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().exec();$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,date:$l$$.date_created,level:$level$$}));if(0==$be_introduced_by_level1$$.lenth)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().exec();$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,date:$l$$.date_created,level:$level$$}));if(0==$be_introduced_level1$$.lenth)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$$){$_ps_par$$.group_id&&global.mongoose.Types.ObjectId.isValid($_ps_par$$.group_id)&&(delete $_ps_par$$.password,$customer_info_group$$=await global.getModel("usergroup").findOne({_id:$_ps_par$$.group_id}).lean())&&($_ps_par$$.group=$customer_info_group$$);var $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$$){console.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(),1==$stocks_user$$.length&&($_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="VND"===$_ps_par$$.ma_nt?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;