Built motion from commit 1038d87.|0.0.141
[motion.git] / server / models / sms_account.js
1 'use strict';
2
3
4 module.exports = function(sequelize, DataTypes) {
5   var SmsAccount = sequelize.define('SmsAccount', {
6     name: {
7       type: DataTypes.STRING
8     },
9     description: {
10       type: DataTypes.STRING
11     },
12     type: {
13       type: DataTypes.ENUM('twilio', 'skebby')
14     },
15     smstype: {
16       type: DataTypes.ENUM('basic', 'classic', 'classic+')
17     },
18     remote: DataTypes.STRING,
19     fidelity: {
20       type: DataTypes.BOOLEAN,
21       defaultValue: false
22     },
23     timeout: {
24       type: DataTypes.INTEGER,
25       defaultValue: 0
26     },
27     phone: {
28       // type: DataTypes.INTEGER,
29       // unique: true
30       type: DataTypes.STRING,
31       unique: true,
32       validate: {
33         is: /^[0-9]+$/
34       }
35     },
36     sid: {
37       type: DataTypes.STRING
38     },
39     token: {
40       type: DataTypes.STRING
41     },
42     username: {
43       type: DataTypes.STRING
44     },
45     password: {
46       type: DataTypes.STRING
47     },
48     acceptUrl: {
49       type: DataTypes.STRING
50     },
51     rejectUrl: {
52       type: DataTypes.STRING
53     },
54     acceptMethod: {
55       type: DataTypes.ENUM('GET', 'POST')
56     },
57     rejectMethod: {
58       type: DataTypes.ENUM('GET', 'POST')
59     },
60     closeUrl: {
61       type: DataTypes.STRING
62     },
63     closeMethod: {
64       type: DataTypes.ENUM('GET', 'POST')
65     },
66     actions: {
67       type: DataTypes.STRING,
68       get: function() {
69         return this.getDataValue('actions') ? JSON.parse(this.getDataValue('actions')) : [];
70       },
71       set: function(val) {
72         return this.setDataValue('actions', JSON.stringify(val));
73       }
74     }
75   }, {
76     tableName: 'sms_accounts',
77     associate: function(models) {
78       SmsAccount.hasMany(models.SmsRoom);
79       SmsAccount.hasMany(models.SmsApplication, {
80         onDelete: 'cascade'
81       });
82       SmsAccount.hasMany(models.SmsMessage);
83       // SCOPES
84       SmsAccount.hasMany(models.SmsDisposition);
85       SmsAccount.belongsTo(models.List);
86       SmsAccount.addScope('default', {
87         include: [{
88           model: models.SmsApplication,
89           include: [{
90             model: models.User,
91             attributes: ['id',
92               'name',
93               'email',
94               'internal',
95               'fullname'
96             ]
97           }, {
98             model: models.SmsQueue
99           }]
100         }]
101       });
102     }
103   });
104   return SmsAccount;
105 };