mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-03-01 02:25:45 +08:00
Add folders and labels to /threads response, version numbers to all models
This commit is contained in:
parent
6ecacdd591
commit
9ff7d3aea5
8 changed files with 34 additions and 6 deletions
|
@ -89,6 +89,8 @@ module.exports = (server) => {
|
|||
{ role: query.in },
|
||||
]},
|
||||
});
|
||||
} else {
|
||||
include.push({model: Category})
|
||||
}
|
||||
|
||||
Thread.findAll({
|
||||
|
|
|
@ -3,6 +3,7 @@ const fs = require('fs');
|
|||
const path = require('path');
|
||||
const HookTransactionLog = require('./hook-transaction-log');
|
||||
const HookAccountCRUD = require('./hook-account-crud');
|
||||
const HookIncrementVersionOnSave = require('./hook-increment-version-on-save');
|
||||
|
||||
require('./database-extensions'); // Extends Sequelize on require
|
||||
|
||||
|
@ -46,12 +47,13 @@ class DatabaseConnector {
|
|||
const modelsPath = path.join(__dirname, 'models/account');
|
||||
const db = this._readModelsInDirectory(sequelize, modelsPath)
|
||||
|
||||
HookTransactionLog(db, sequelize);
|
||||
HookIncrementVersionOnSave(db, sequelize);
|
||||
|
||||
db.sequelize = sequelize;
|
||||
db.Sequelize = Sequelize;
|
||||
db.accountId = accountId;
|
||||
|
||||
HookTransactionLog(db, sequelize);
|
||||
|
||||
return sequelize.authenticate().then(() =>
|
||||
sequelize.sync()
|
||||
).thenReturn(db);
|
||||
|
@ -72,11 +74,11 @@ class DatabaseConnector {
|
|||
const modelsPath = path.join(__dirname, 'models/shared');
|
||||
const db = this._readModelsInDirectory(sequelize, modelsPath)
|
||||
|
||||
HookAccountCRUD(db, sequelize);
|
||||
|
||||
db.sequelize = sequelize;
|
||||
db.Sequelize = Sequelize;
|
||||
|
||||
HookAccountCRUD(db, sequelize);
|
||||
|
||||
return sequelize.authenticate().then(() =>
|
||||
sequelize.sync()
|
||||
).thenReturn(db);
|
||||
|
|
|
@ -7,7 +7,7 @@ module.exports = (db, sequelize) => {
|
|||
PubsubConnector.broadcastClient().lpushAsync('accounts:unclaimed', dataValues.id);
|
||||
PubsubConnector.notify({
|
||||
accountId: dataValues.id,
|
||||
type: MessageTypes.ACCOUNT_UPDATED
|
||||
type: MessageTypes.ACCOUNT_UPDATED,
|
||||
});
|
||||
}
|
||||
})
|
||||
|
@ -15,7 +15,7 @@ module.exports = (db, sequelize) => {
|
|||
if ($modelOptions.name.singular === 'Account') {
|
||||
PubsubConnector.notify({
|
||||
accountId: dataValues.id,
|
||||
type: MessageTypes.ACCOUNT_UPDATED
|
||||
type: MessageTypes.ACCOUNT_UPDATED,
|
||||
});
|
||||
}
|
||||
})
|
||||
|
|
13
packages/nylas-core/hook-increment-version-on-save.js
Normal file
13
packages/nylas-core/hook-increment-version-on-save.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
|
||||
module.exports = (db) => {
|
||||
for (const modelName of Object.keys(db)) {
|
||||
const model = db[modelName];
|
||||
|
||||
model.beforeCreate('increment-version-c', (instance) => {
|
||||
instance.version = 1;
|
||||
});
|
||||
model.beforeUpdate('increment-version-u', (instance) => {
|
||||
instance.version = instance.version ? instance.version + 1 : 1;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ const {JSONType} = require('../../database-types');
|
|||
module.exports = (sequelize, Sequelize) => {
|
||||
const Category = sequelize.define('category', {
|
||||
accountId: { type: Sequelize.STRING, allowNull: false },
|
||||
version: Sequelize.INTEGER,
|
||||
name: Sequelize.STRING,
|
||||
role: Sequelize.STRING,
|
||||
type: Sequelize.ENUM('folder', 'label'),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
module.exports = (sequelize, Sequelize) => {
|
||||
const File = sequelize.define('file', {
|
||||
accountId: { type: Sequelize.STRING, allowNull: false },
|
||||
version: Sequelize.INTEGER,
|
||||
filename: Sequelize.STRING,
|
||||
contentId: Sequelize.STRING,
|
||||
contentType: Sequelize.STRING,
|
||||
|
|
|
@ -7,6 +7,7 @@ const {JSONType, JSONARRAYType} = require('../../database-types');
|
|||
module.exports = (sequelize, Sequelize) => {
|
||||
const Message = sequelize.define('message', {
|
||||
accountId: { type: Sequelize.STRING, allowNull: false },
|
||||
version: Sequelize.INTEGER,
|
||||
messageId: Sequelize.STRING,
|
||||
body: Sequelize.STRING,
|
||||
headers: JSONType('headers'),
|
||||
|
|
|
@ -3,6 +3,7 @@ const {JSONARRAYType} = require('../../database-types');
|
|||
module.exports = (sequelize, Sequelize) => {
|
||||
const Thread = sequelize.define('thread', {
|
||||
accountId: { type: Sequelize.STRING, allowNull: false },
|
||||
version: Sequelize.INTEGER,
|
||||
threadId: Sequelize.STRING,
|
||||
subject: Sequelize.STRING,
|
||||
snippet: Sequelize.STRING,
|
||||
|
@ -22,9 +23,16 @@ module.exports = (sequelize, Sequelize) => {
|
|||
},
|
||||
instanceMethods: {
|
||||
toJSON: function toJSON() {
|
||||
if (!this.categories) {
|
||||
throw new Error("Thread.toJSON called on a thread where categories were not eagerly loaded.")
|
||||
}
|
||||
const folders = this.categories.filter(c => c.type === 'folder');
|
||||
const labels = this.categories.filter(c => c.type === 'label');
|
||||
return {
|
||||
id: this.id,
|
||||
object: 'thread',
|
||||
folders: folders,
|
||||
labels: labels,
|
||||
account_id: this.accountId,
|
||||
participants: this.participants,
|
||||
subject: this.subject,
|
||||
|
|
Loading…
Reference in a new issue