diff --git a/packages/nylas-api/route-helpers.js b/packages/nylas-api/route-helpers.js index 9ed1cac0d..319ba8630 100644 --- a/packages/nylas-api/route-helpers.js +++ b/packages/nylas-api/route-helpers.js @@ -1,5 +1,5 @@ const Serialization = require('./serialization'); -const {PromiseUtils, PubsubConnector, MessageTypes} = require('nylas-core') +const {PubsubConnector, MessageTypes} = require('nylas-core') module.exports = { createSyncbackRequest: function createSyncbackRequest(request, reply, syncRequestArgs) { @@ -13,24 +13,4 @@ module.exports = { }) }) }, - findFolderOrLabel: function findFolderOrLabel({Folder, Label}, str) { - return PromiseUtils.props({ - folder: Folder.find({ - where: { $or: [ - { id: str }, - { name: str }, - { role: str }, - ]}, - }), - label: Label.find({ - where: { $or: [ - { id: str }, - { name: str }, - { role: str }, - ]}, - }), - }).then(({folder, label}) => - folder || label || null - ) - }, } diff --git a/packages/nylas-api/routes/categories.js b/packages/nylas-api/routes/categories.js index d0143cda6..7b62141f8 100644 --- a/packages/nylas-api/routes/categories.js +++ b/packages/nylas-api/routes/categories.js @@ -17,7 +17,6 @@ module.exports = (server) => { query: { limit: Joi.number().integer().min(1).max(2000).default(100), offset: Joi.number().integer().min(0).default(0), - view: Joi.string().valid('expanded', 'count'), }, }, response: { diff --git a/packages/nylas-api/routes/contacts.js b/packages/nylas-api/routes/contacts.js index 549ce5cb8..cc5e2833b 100644 --- a/packages/nylas-api/routes/contacts.js +++ b/packages/nylas-api/routes/contacts.js @@ -11,9 +11,6 @@ module.exports = (server) => { tags: ['contacts'], validate: { query: { - name: Joi.string(), - email: Joi.string().email(), - view: Joi.string().valid('expanded', 'count'), limit: Joi.number().integer().min(1).max(2000).default(100), offset: Joi.number().integer().min(0).default(0), }, @@ -27,18 +24,7 @@ module.exports = (server) => { handler: (request, reply) => { request.getAccountDatabase().then((db) => { const {Contact} = db; - const query = request.query; - const where = {}; - - if (query.name) { - where.name = {like: query.name}; - } - if (query.email) { - where.email = query.email; - } - Contact.findAll({ - where: where, limit: request.query.limit, offset: request.query.offset, }).then((contacts) => { diff --git a/packages/nylas-api/routes/files.js b/packages/nylas-api/routes/files.js index 46f7ee980..ec8db02fa 100644 --- a/packages/nylas-api/routes/files.js +++ b/packages/nylas-api/routes/files.js @@ -12,9 +12,6 @@ module.exports = (server) => { tags: ['files'], validate: { query: { - filename: Joi.string(), - message_id: Joi.number().integer().min(0), - content_type: Joi.string(), limit: Joi.number().integer().min(1).max(2000).default(100), offset: Joi.number().integer().min(0).default(0), }, @@ -28,21 +25,7 @@ module.exports = (server) => { handler: (request, reply) => { request.getAccountDatabase().then((db) => { const {File} = db; - const query = request.query; - const where = {}; - - if (query.filename) { - where.filename = query.filename; - } - if (query.message_id) { - where.messageId = query.message_id; - } - if (query.content_type) { - where.contentType = query.content_type; - } - File.findAll({ - where: where, limit: request.query.limit, offset: request.query.offset, }).then((files) => { diff --git a/packages/nylas-api/routes/messages.js b/packages/nylas-api/routes/messages.js index c8ea00b1e..58b82c54a 100644 --- a/packages/nylas-api/routes/messages.js +++ b/packages/nylas-api/routes/messages.js @@ -1,6 +1,6 @@ const Joi = require('joi'); const Serialization = require('../serialization'); -const {createSyncbackRequest, findFolderOrLabel} = require('../route-helpers'); +const {createSyncbackRequest} = require('../route-helpers'); module.exports = (server) => { @@ -13,17 +13,8 @@ module.exports = (server) => { tags: ['messages'], validate: { query: { - 'unread': Joi.boolean(), - 'starred': Joi.boolean(), - 'subject': Joi.string(), - 'thread_id': Joi.number().integer().min(0), - 'received_before': Joi.date(), - 'received_after': Joi.date(), - 'filename': Joi.string(), - 'in': Joi.string(), - 'limit': Joi.number().integer().min(1).max(2000).default(100), - 'offset': Joi.number().integer().min(0).default(0), - 'view': Joi.string().valid('expanded', 'count'), + limit: Joi.number().integer().min(1).max(2000).default(100), + offset: Joi.number().integer().min(0).default(0), }, }, response: { @@ -34,60 +25,13 @@ module.exports = (server) => { }, handler: (request, reply) => { request.getAccountDatabase().then((db) => { - const {Message, Folder, Label, File} = db; - const query = request.query; - const where = {}; - const include = []; - - if (query.unread != null) { - where.unread = query.unread; - } - if (query.starred != null) { - where.starred = query.starred; - } - if (query.subject) { - where.subject = query.subject; - } - if (query.thread_id != null) { - where.threadId = query.thread_id; - } - if (query.received_before) { - where.date = {lt: query.received_before}; - } - if (query.received_after) { - if (where.date) { - where.date.gt = query.received_after; - } else { - where.date = {gt: query.received_after}; - } - } - if (query.filename) { - include.push({ - model: File, - where: {filename: query.filename}, - }) - } - - let loadAssociatedModels = Promise.resolve(); - if (query.in) { - loadAssociatedModels = findFolderOrLabel({Folder, Label}, query.in) - .then((container) => { - include.push({ - model: container.Model, - where: {id: container.id}, - }) - }) - } - - loadAssociatedModels.then(() => { - Message.findAll({ - where: where, - limit: query.limit, - offset: query.offset, - include: include, - }).then((messages) => { - reply(Serialization.jsonStringify(messages)); - }) + const {Message, Folder, Label} = db; + Message.findAll({ + limit: request.query.limit, + offset: request.query.offset, + include: [{model: Folder}, {model: Label}], + }).then((messages) => { + reply(Serialization.jsonStringify(messages)); }) }) }, diff --git a/packages/nylas-api/routes/threads.js b/packages/nylas-api/routes/threads.js index aa6d8102d..b8a058cf1 100644 --- a/packages/nylas-api/routes/threads.js +++ b/packages/nylas-api/routes/threads.js @@ -1,7 +1,7 @@ const Joi = require('joi'); const _ = require('underscore'); const Serialization = require('../serialization'); -const {createSyncbackRequest, findFolderOrLabel} = require('../route-helpers') +const {createSyncbackRequest} = require('../route-helpers') module.exports = (server) => { server.route({ @@ -13,19 +13,8 @@ module.exports = (server) => { tags: ['threads'], validate: { query: { - 'id': Joi.number().integer().min(0), - 'view': Joi.string().valid('expanded', 'count'), - 'subject': Joi.string(), - 'unread': Joi.boolean(), - 'starred': Joi.boolean(), - 'started_before': Joi.date().timestamp(), - 'started_after': Joi.date().timestamp(), - 'last_message_before': Joi.date().timestamp(), - 'last_message_after': Joi.date().timestamp(), - 'in': Joi.string().allow(Joi.number()), - 'filename': Joi.string(), - 'limit': Joi.number().integer().min(1).max(2000).default(100), - 'offset': Joi.number().integer().min(0).default(0), + limit: Joi.number().integer().min(1).max(2000).default(100), + offset: Joi.number().integer().min(0).default(0), }, }, response: { @@ -41,123 +30,21 @@ module.exports = (server) => { }, handler: (request, reply) => { request.getAccountDatabase().then((db) => { - const {Thread, Folder, Label, Message, File} = db; - const query = request.query; - const where = {}; - const include = []; - - if (query.id) { - where.id = query.id; - } - if (query.subject) { - // the 'like' operator is case-insenstive in sequelite and for - // non-binary strings in mysql - where.subject = {like: query.subject}; - } - - // Boolean queries - if (query.unread) { - where.unreadCount = {gt: 0}; - } else if (query.unread !== undefined) { - where.unreadCount = 0; - } - if (query.starred) { - where.starredCount = {gt: 0}; - } else if (query.starred !== undefined) { - where.starredCount = 0; - } - - // Timestamp queries - if (query.last_message_before) { - where.lastMessageReceivedDate = {lt: query.last_message_before}; - } - if (query.last_message_after) { - if (where.lastMessageReceivedDate) { - where.lastMessageReceivedDate.gt = query.last_message_after; - } else { - where.lastMessageReceivedDate = {gt: query.last_message_after}; - } - } - if (query.started_before) { - where.firstMessageDate = {lt: query.started_before}; - } - if (query.started_after) { - if (where.firstMessageDate) { - where.firstMessageDate.gt = query.started_after; - } else { - where.firstMessageDate = {gt: query.started_after}; - } - } - - // Association queries - let loadAssociatedModels = Promise.resolve(); - if (query.in) { - loadAssociatedModels = findFolderOrLabel({Folder, Label}, query.in) - .then((container) => { - include.push({ - model: container.Model, - where: {id: container.id}, - }) - include.push({model: container.Model === Folder ? Label : Folder}) - }) - } else { - include.push({model: Folder}) - include.push({model: Label}) - } - - const messagesInclude = []; - if (query.filename) { - messagesInclude.push({ - model: File, - where: {filename: query.filename}, - }) - } - if (query.view === 'expanded') { - include.push({ - model: Message, - as: 'messages', - attributes: _.without(Object.keys(Message.attributes), 'body'), - include: messagesInclude, - }) - } else { - include.push({ - model: Message, - as: 'messages', - attributes: ['id'], - include: messagesInclude, - }) - } - - if (query.view === 'count') { - loadAssociatedModels.then(() => { - return Thread.count({ - where: where, - include: include, - }).then((count) => { - reply(Serialization.jsonStringify({count: count})); - }); - }) - return; - } - - loadAssociatedModels.then(() => { - Thread.findAll({ - limit: request.query.limit, - offset: request.query.offset, - where: where, - include: include, - }).then((threads) => { - // if the user requested the expanded viw, fill message.folder using - // thread.folders, since it must be a superset. - if (query.view === 'expanded') { - for (const thread of threads) { - for (const msg of thread.messages) { - msg.folder = thread.folders.find(c => c.id === msg.folderId); - } - } - } - reply(Serialization.jsonStringify(threads)); - }) + const {Thread, Folder, Label, Message} = db; + Thread.findAll({ + limit: request.query.limit, + offset: request.query.offset, + include: [ + {model: Folder}, + {model: Label}, + { + model: Message, + as: 'messages', + attributes: _.without(Object.keys(Message.attributes), 'body'), + }, + ], + }).then((threads) => { + reply(Serialization.jsonStringify(threads)); }) }) },