UNPKG

flexbiz-server

Version:

Flexible Server

17 lines (16 loc) 6.61 kB
'use strict';let wallet=require("./wallet"); const cryptoJs=require("crypto-js"),moment=require("moment"),PostSocai=require("../libs/post-socai"),senderSchema=new Schema({email:{type:String,required:!0,maxlength:128},signature:{type:String,required:!0}}),receiverSchema=new Schema({email:{type:String,required:!0}}),transactionSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_trans:{type:String,required:!0,maxlength:1024},sender:senderSchema,receiver:receiverSchema,amount:{type:Number,required:!0},denom:{type:String,default:"vnd"}, description:String,id_ct:String,so_ct:String,ngay_ct:{type:Date,default:Date.now},ma_ct:String,tk_no:String,tk_co:String,status:{type:String,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}}),model=mongoose.models.transaction||mongoose.model("transaction",transactionSchema); (global.configs||{}).createIndexes&&(senderSchema.index({email:1}),receiverSchema.index({email:1}),transactionSchema.index({id_app:1}),transactionSchema.index({id_ct:1}),transactionSchema.index({"sender.email":1}),transactionSchema.index({"receiver.email":1}),transactionSchema.index({id_trans:1}),transactionSchema.index({ma_ct:1}),transactionSchema.index({denom:1}),transactionSchema.index({ngay_ct:1}),transactionSchema.index({date_created:1}),transactionSchema.index({status:1}),transactionSchema.index({user_created:1, visible_to:1,visible_to_users:1}),model.on("index",async function($err$$){if($err$$)return console.error("Product index error",$err$$);console.log("transaction indexing complete")}));model.verifyTrans=async($data$$,$trans$$)=>await wallet.verifySignature($data$$.id_app,$data$$.sender_email,{id_app:$data$$.id_app,sender_email:$data$$.sender_email,receiver_email:$data$$.receiver_email,amount:$data$$.amount,denom:$data$$.denom||"vnd"},$trans$$.sender.signature); model.createTransId=($id_app$$,$sender_email$$,$receiver_email$$,$amount$$)=>{let $timestamp$$=(new Date).getTime();return cryptoJs.SHA256($id_app$$+$sender_email$$+$receiver_email$$+$amount$$.toString()+$timestamp$$).toString()}; model.createTrans=async $data$$=>{$data$$.otherData||($data$$.otherData={});if($data$$.receiver_email===$data$$.sender_email||!$data$$.amount)throw"Ng\u01b0\u1eddi nh\u1eadn v\u00e0 ng\u01b0\u1eddi g\u1eedi ph\u1ea3i kh\u00e1c nhau v\u00e0 s\u1ed1 l\u01b0\u1ee3ng ph\u1ea3i l\u1edbn h\u01a1n 0";let $id_trans$$=model.createTransId($data$$.id_app,$data$$.sender_email,$data$$.receiver_email,$data$$.amount),$signature$$=await wallet.sign($data$$.id_app,$data$$.sender_email,{id_app:$data$$.id_app,sender_email:$data$$.sender_email, receiver_email:$data$$.receiver_email,amount:$data$$.amount}),$trans$$=new model({id_app:$data$$.id_app,id_trans:$id_trans$$,sender:{email:$data$$.sender_email,signature:$signature$$},receiver:{email:$data$$.receiver_email},amount:$data$$.amount,denom:$data$$.denom,description:$data$$.description,id_ct:$data$$.otherData.id_ct,so_ct:$data$$.otherData.so_ct,ngay_ct:$data$$.otherData.ngay_ct,ma_ct:$data$$.otherData.ma_ct,tk_no:$data$$.otherData.tk_no,tk_co:$data$$.otherData.tk_co});return await new Promise(($resolve$$, $reject$$)=>{$trans$$.save(async($e_master_users_will_receive$$,$rs$$)=>{if($e_master_users_will_receive$$)return console.log($e_master_users_will_receive$$),$reject$$(Error($e_master_users_will_receive$$.message));if($rs$$.tk_no&&$rs$$.tk_co){$details_sc_kh_no_notificationData_title$$=await global.getModel("customer").findOne({id_app:$rs$$.id_app,of_user:$rs$$.receiver.email}).lean();let $kh_co$$=await global.getModel("customer").findOne({id_app:$rs$$.id_app,of_user:$rs$$.sender.email}).lean(),$ma_dvcs$$= await global.getModel("dvcs").findOne({id_app:$rs$$.id_app}).lean();$e_master_users_will_receive$$=$rs$$.toObject();$e_master_users_will_receive$$.dien_giai=$e_master_users_will_receive$$.description;$e_master_users_will_receive$$.ma_dvcs=(($ma_dvcs$$||{})._id||"").toString();$details_sc_kh_no_notificationData_title$$=[{tk_no:$rs$$.tk_no,tk_co:$rs$$.tk_co,tien_nt:$rs$$.amount,tien:$rs$$.amount,ma_nt:$rs$$.denom.toUpperCase(),ty_gia:1,ma_kh_no:($details_sc_kh_no_notificationData_title$$||{}).ma_kh, ma_kh_co:($kh_co$$||{}).ma_kh}];(new PostSocai($e_master_users_will_receive$$,$details_sc_kh_no_notificationData_title$$)).run($e$$=>{$e$$&&console.error($e$$)})}$e_master_users_will_receive$$=[$rs$$.sender.email,$rs$$.receiver.email];var $details_sc_kh_no_notificationData_title$$=`${$data$$.sender_email} \u0111\u00e3 chuy\u1ec3n cho ${$data$$.receiver_email} ${$rs$$.amount} ${$rs$$.denom} v\u1edbi n\u1ed9i dung: ${$data$$.description}`;if($data$$.sender_email===$data$$.id_app||$data$$.receiver_email=== $data$$.id_app)$details_sc_kh_no_notificationData_title$$=`${$data$$.description}`;$details_sc_kh_no_notificationData_title$$={_id:$rs$$._id,id_app:$data$$.id_app,title:$details_sc_kh_no_notificationData_title$$,body:$details_sc_kh_no_notificationData_title$$,code:"transaction",event:"new",action:"NEW"};global.getModel("app").emitEvent($data$$.id_app,`${$details_sc_kh_no_notificationData_title$$.code}:${$details_sc_kh_no_notificationData_title$$.event}`,$details_sc_kh_no_notificationData_title$$, null,$e_master_users_will_receive$$,!0);$resolve$$($rs$$.toObject())})})};model.getTrans=async $id_trans$$=>new Promise($resolve$$=>{model.findOne({id_trans:$id_trans$$},($e$$,$rs$$)=>{$resolve$$($rs$$)})});model.deleteTrans=async $id_trans$$=>{$id_trans$$="string"===typeof $id_trans$$?{id_trans:$id_trans$$}:{...$id_trans$$};console.log("delete transaction",$id_trans$$);await model.deleteMany($id_trans$$)}; model.balance=async($email$$,$date_to$$)=>{$date_to$$||($date_to$$=new Date);$date_to$$=moment($date_to$$).endOf("date").toDate();return(await model.find({date_created:{$lte:$date_to$$},$or:[{"sender.email":$email$$},{"receiver.email":$email$$}]})).map($tran$$=>$tran$$.sender.email===$email$$?0-$tran$$.amount:$tran$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0)}; model.in=async($email$$,$date_to$$)=>{$date_to$$||($date_to$$=new Date);$date_to$$=moment($date_to$$).endOf("date").toDate();return(await model.find({date_created:{$lte:$date_to$$},$or:[{"receiver.email":$email$$}]})).map($tran$$=>$tran$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0)}; model.out=async($email$$,$date_to$$)=>{$date_to$$||($date_to$$=new Date);$date_to$$=moment($date_to$$).endOf("date").toDate();return(await model.find({date_created:{$lte:$date_to$$},$or:[{"sender.email":$email$$}]})).map($tran$$=>$tran$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0)};module.exports=model;