【问题标题】:conference model - create schedule method (Sequelize)会议模型——创建日程方法(Sequelize)
【发布时间】:2017-07-13 23:13:45
【问题描述】:
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
          },
      }
  });
};

我的问题现在是关于如何处理以下任务的理论问题:

  • 会议必须是可安排的

所以会议有一个固定的开始和结束日期。它必须具有具有值的那些字段,并且在尚未启动或已结束时也无法加入。否则会报错。

所以我需要一个方法来说明我想安排会议并传递开始/结束值。

这可以用一种方法完成还是应该分开?我需要什么方法,他们在他们的程序中基本上会做什么?

【问题讨论】:

  • 您究竟希望您的方法做什么?只需设置会议的startDateendDate 或其他一些动作?
  • @piotrbienias 是的,这是最低要求。稍后的其他方法是加入会议并检查它是否仍然有效(开始,结束)和其他验证。

标签: javascript node.js sequelize.js


【解决方案1】:

根据您的评论,您的 scheduleConference 方法必须简单地更新指定的实例(会议)。你确实把它放在classMethods,但是我建议你把它放在instanceMethods,它的简单实现可能如下:

classMethods: {
},
instanceMethods: {
    scheduleConference: function(start, end){
        return this.update({ startDate: start, endDate: end }).then((conference) => {
             // here you get updated instance of conference
             return reference;
        });
    }
}

上面的方法可以这样用

// assuming that conference is a sequelize model instance
conference.scheduleConference(start, end).then((self) => {
    // updated conference as self
});


编辑

我看到你已经实现了getOrCreateConference 方法,但是sequelize 自己提供了这种方法,它被称为findOrCreate。你可以在像models.Model.findOrCreate()这样的sequelize模型上使用它

【讨论】:

    猜你喜欢
    • 2014-01-05
    • 2019-08-10
    • 2020-08-25
    • 2019-06-25
    • 2020-08-28
    • 2020-08-25
    • 2021-12-31
    • 2019-12-12
    • 2020-01-29
    相关资源
    最近更新 更多