bdd83992d0e06eec654699776a1075738f3ceb5c
[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                 status: {
16                         type: DataTypes.ENUM('NEW', 'OPEN', 'CLOSED', 'UNMANAGED'),
17                         defaultValue: 'NEW'
18                 },
19                 lastEvent: {
20                         type: DataTypes.ENUM('SENT', 'SENDING', 'RECEIVED', 'FAILED', 'NOTE')
21                 },
22                 tags: {
23                         type: DataTypes.TEXT,
24                         get: function() {
25                                 return this.getDataValue('tags') ? this.getDataValue('tags').split(';') : [];
26                         },
27                         set: function(val) {
28                                 this.setDataValue('tags', val.join(';'));
29                         }
30                 }
31         }, {
32                 tableName: 'mail_rooms',
33                 paranoid: true,
34                 associate: function(models) {
35                         // BINDING
36                         MailRoom.hasMany(models.MailMessage);
37                         MailRoom.belongsTo(models.MailAccount);
38                         MailRoom.belongsToMany(models.User, {
39                                 through: 'user_has_mail_rooms'
40                         });
41                         // SCOPES
42                         MailRoom.addScope('default', {
43                                 order: [
44                                         ['createdAt', 'DESC']
45                                 ],
46                                 include: [{
47                                         model: models.MailAccount
48                                 }, {
49                                         model: models.MailMessage,
50                                         include: [{
51                                                 model: models.MailAttachment
52                                         }, {
53                                                 model: models.User,
54                                                 attributes: ['id', 'name', 'fullname', 'email', 'userpic']
55                                         }]
56                                 }, {
57                                         model: models.User,
58                                         attributes: ['id', 'name', 'fullname', 'email', 'userpic']
59                                 }]
60                         });
61                 }
62         });
63
64         return MailRoom;
65 };