4a7a8d39d80c8d0607a7af8019046a5f5b8abd5c
[motion.git] / server / models / sms_room.js
1 'use strict';
2
3 module.exports = function(sequelize, DataTypes) {
4   var SmsRoom = sequelize.define('SmsRoom', {
5     from: {
6       type: DataTypes.STRING,
7       validate: {
8         is: /^[0-9]+$/
9       }
10     },
11     status: {
12       type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED', 'UNMANAGED'),
13       defaultValue: 'NEW'
14     },
15     tags: {
16       type: DataTypes.TEXT,
17       get: function() {
18         return this.getDataValue('tags') ? this.getDataValue('tags').split(';') : [];
19       },
20       set: function(val) {
21         this.setDataValue('tags', val.join(';'));
22       }
23     },
24     disposition: {
25       type: DataTypes.STRING
26     },
27   }, {
28     tableName: 'sms_rooms',
29     associate: function(models) {
30       // BINDING
31       SmsRoom.hasMany(models.SmsMessage);
32       SmsRoom.belongsToMany(models.User, {
33         through: 'user_has_sms_rooms'
34       });
35       SmsRoom.belongsTo(models.SmsAccount);
36       SmsRoom.addScope('default', {
37         order: [
38           ['createdAt', 'DESC']
39         ],
40         include: [{
41           model: models.SmsAccount
42         }, {
43           model: models.SmsMessage,
44           include: [{
45             model: models.User,
46             attributes: ['id', 'name', 'fullname', 'email']
47           }]
48         }, {
49           model: models.User,
50           attributes: ['id', 'name', 'fullname', 'email']
51         }]
52       });
53       SmsRoom.addScope('agent', function(id) {
54         return {
55           include: [{
56             model: models.User,
57             where: {
58               id: id
59             }
60           }]
61         }
62       });
63     }
64
65
66   });
67   return SmsRoom;
68 };