779a9e33566f42846ed3ad48adffe2c96a088b3f
[motion.git] / server / models / mail_room.js
1 /**
2  * Chat Website Model
3  */
4
5
6 module.exports = function(sequelize, DataTypes) {
7         var MailRoom = sequelize.define('MailRoom', {
8                 subject: DataTypes.STRING,
9                 from: DataTypes.STRING,
10                 account: DataTypes.STRING,
11                 attachment: {
12                         type: DataTypes.BOOLEAN,
13                         defaultValue: false
14                 },
15                 mailIn: {
16                         type: DataTypes.INTEGER,
17                         defaultValue: 0
18                 },
19                 mailOut: {
20                         type: DataTypes.INTEGER,
21                         defaultValue: 0
22                 },
23                 status: {
24                         type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED', 'UNMANAGED'),
25                         defaultValue: 'NEW'
26                 },
27                 lastEvent: {
28                         type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED', 'NOTE')
29                 },
30                 lastEventAt: {
31                         type: DataTypes.DATE
32                 },
33                 deleted: {
34                         type: DataTypes.BOOLEAN,
35                         defaultValue: false
36                 },
37                 tags: {
38                         type: DataTypes.TEXT,
39                         get: function() {
40                                 return this.getDataValue('tags') ? this.getDataValue('tags').split(';').pop() : [];
41                         },
42                         set: function(val) {
43                                 this.setDataValue('tags', val && val.length ? val.join(';') + ';' : null);
44                         }
45                 },
46                 disposition: {
47                         type: DataTypes.STRING
48                 },
49                 deletedAt: {
50                         type: DataTypes.DATE
51                 },
52         }, {
53                 tableName: 'mail_rooms',
54                 paranoid: true,
55                 associate: function(models) {
56                         // BINDING
57                         MailRoom.hasMany(models.MailMessage);
58                         MailRoom.belongsTo(models.MailAccount);
59                         MailRoom.belongsToMany(models.User, {
60                                 through: 'user_has_mail_rooms'
61                         });
62                         // SCOPES
63                         MailRoom.addScope('default', {
64                                 order: [
65                                         ['createdAt', 'DESC']
66                                 ],
67                                 include: [{
68                                         model: models.MailAccount
69                                 }, {
70                                         model: models.MailMessage,
71                                         include: [{
72                                                 model: models.MailAttachment
73                                         }, {
74                                                 model: models.User,
75                                                 attributes: ['id', 'name', 'fullname', 'email', 'userpic']
76                                         }]
77                                 }, {
78                                         model: models.User,
79                                         attributes: ['id', 'name', 'fullname', 'email', 'userpic']
80                                 }]
81                         });
82                 }
83         });
84
85         return MailRoom;
86 };