Javascript 会议模型-创建日程安排方法(Sequelize)
我现在的问题是关于如何完成以下任务的理论问题:Javascript 会议模型-创建日程安排方法(Sequelize),javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我现在的问题是关于如何完成以下任务的理论问题: 会议必须可安排 因此,会议有一个固定的开始和结束日期。它必须具有具有值的字段,并且在尚未启动或已结束时也不可能加入。否则它将抛出一个错误 所以我需要一个方法,我想安排一个会议,并通过开始/结束值 这可以在一个方法内完成,还是应该拆分?我需要什么方法以及它们在其过程中基本上做什么?根据您的评论,您的scheduleConference方法必须只更新指定的实例(conference)。您确实将它放在了classMethods中,但是我建议您将它放在
- 会议必须可安排
这可以在一个方法内完成,还是应该拆分?我需要什么方法以及它们在其过程中基本上做什么?根据您的评论,您的
scheduleConference
方法必须只更新指定的实例(conference)。您确实将它放在了classMethods
中,但是我建议您将它放在instanceMethods
中,它的简单实现可能如下所示:
var _ = require('lodash');
var Promise = require('bluebird');
var Sequelize = require('sequelize');
var ResourceNotFound = require('./errors').ResourceNotFound;
var ResourceAccessDenied = require('./errors').ResourceAccessDenied;
var ResourceExpired = require('./errors').ResourceExpired;
var ConferenceState = {
NEW: 'new',
...
};
module.exports.define = function define(options) {
var sequelize = options.sequelize;
return sequelize.define('conference', {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
primaryKey: true
},
startDate: {
type: Sequelize.DATE,
},
endDate: {
type: Sequelize.DATE,
},
state: {
type: Sequelize.ENUM(
ConferenceState.NEW,
...
),
defaultValue: ConferenceState.NEW,
required: true,
allowNull: false
}
}, {
classMethods: {
getOrCreateConference: function createConference(data) {
return new Promise(function (resolve, reject) {
var Conference = sequelize.models.conference;
Conference.findOne({
where: data
}).then(function(conference){
if(_.isObject(conference)) {
resolve(conference);
} else {
return Conference.create(data);
}
}).then(function(conference){
resolve(conference);
}).catch(function(err){
reject(err);
});
});
},
scheduleConference: function scheduleConference(start, end) {
// TODO
},
}
});
};
上述方法可以这样使用
classMethods: {
},
instanceMethods: {
scheduleConference: function(start, end){
return this.update({ startDate: start, endDate: end }).then((conference) => {
// here you get updated instance of conference
return reference;
});
}
}
编辑
我看到您已经实现了
getOrCreateConference
方法,但是sequelize本身提供了这种方法,它被调用。您可以在sequelize模型上使用它,如models.model.findOrCreate()
您希望您的方法具体做什么?只需设置会议的开始日期
和结束日期
,或其他一些操作?@Piotrbienia是的,这是最低要求。稍后的另一种方法是加入会议并检查它是否仍然有效(开始、结束)和其他验证。
// assuming that conference is a sequelize model instance
conference.scheduleConference(start, end).then((self) => {
// updated conference as self
});