如何根据用户的有效服务续订日期自动扣除用户可用信用额度?
让我描述一下当前的情况。目前,我正在开发一个Express应用程序,它基本上是一个计费系统,它将自动管理客户端并根据他的活动服务收费。但我卡住了!如果他(用户)没有足够的余额,如何从用户的帐户中自动扣除信用额并续订服务或暂停服务。
这就是我所拥有的。
服务架构:
var mongoose= require('mongoose');
var Schema = new mongoose.Schema({
user:{
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true
},
services:{
username: {type: String, required: true, unique: true},
package: {type: String, required: true},
domain: {type: String, required: true, unique: true},
status: String,
dateAdded: {type: Date, default: Date.now },
lastRenewed: Date,
nextRenewal: Date,
renewalCost: Number // Renewal Cost Of The Service.
}
})
module.exports = mongoose.model('Service', Schema);
用户架构:
var mongoose= require('mongoose');
var Schema = new mongoose.Schema({
name:{
type: String,
min: 1,
required: true
},
username:{
type: String,
unique: true
},
password:{
type: String, // Storing Hashed Password
required: true
},
salt:{
type: String
},
meta: {
email: String,
phone: Number,
dateOfBarth: String,
address: {
companyName: String,
address1: String,
address2: String,
city: String,
state: String
}
},
credit:{type: Number, default: 0}, // Avilable Credits
isAdmin: {type: Boolean, default: false} // If The User Is Admin Or Not?
});
module.exports = mongoose.model('User', Schema);
现在我想在“nextRenewal”日期运行查询或功能(或类似的东西)并从用户的可用Credits中扣除续订成本并保存用户并延长下一个续订日期。
答案:使用npmjs.com/package/node-schedule安排工作。
感谢@Kilizo
答案 0 :(得分:0)
您希望findOneAndUpdate服务并使用Populate填充其中的用户对象。
未经测试的代码:
Service.findOneAndUpdate({ _id: serviceId }).populate('user').then((service) => {
if(service.user.credit > 10) {
service.user.credit -= 10;
service.services.nextRenewal = //newDate;
service.user.save();
service.save();
}
})
答案 1 :(得分:0)
要在下次续订日期自动运行更新功能,您必须使用cron job.Please查找有关cron作业的更多信息:Cron Job
答案 2 :(得分:0)
有两种主要方法:
Windows计划程序:您可以使用所需的功能创建项目,并将该项目作为任务添加到Windows计划程序中,并根据您所需的日期安排该任务。
cron :您可以根据所需日期使用cron作业来安排任务。
我建议为此编写一个 cron ,因为它在Web服务器上运行,直到服务器停止工作,而Windows调度程序在本地计算机上运行,只有在您的计算机运行时才能运行