File: models/server/Handler.js
"use strict";
require("../../db");
var Promise = require("bluebird");
var Base = require("./Base");
var User = require("./User");
/**
* Handler for {{#crossLink "models.server.Ticket"}}{{/crossLink}}
*
* @namespace models.server
* @extends models.server.Base
* @class Handler
*/
var Handler = Base.extend({
tableName: "handlers",
initialize: function() {
this.on("creating", this._assertCreatorIsManagerOrOwner.bind(this));
},
_assertCreatorIsManagerOrOwner: function() {
return Promise.all([
User.byId(this.get("createdById")).fetch({ require: true }),
this.ticket().fetch({ require: true })
])
.spread(function(user, ticket){
if (user.isManager()) return;
if (ticket.get("createdById") === user.get("id")) return;
throw new Error("Only managers or owners can add handlers");
});
},
defaults: function() {
return {
createdAt: new Date(),
updatedAt: new Date()
};
},
/**
* @method handler
* @return {models.server.User}
*/
handler: function() {
return this.belongsTo(User, "handler");
},
/**
* @method ticket
* @return {models.server.Ticket}
*/
ticket: function() {
var Ticket = require("./Ticket");
return this.belongsTo(Ticket, "ticketId");
},
/**
* @method createdBy
* @return {models.server.User}
*/
createdBy: function() {
return this.belongsTo(User, "createdById");
}
});
module.exports = Handler;