@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
60 lines (55 loc) • 1.78 kB
JavaScript
'use strict';
const db = require('../../db/');
module.exports = {
byPage
};
function byPage(options) {
let page = options.page || 1;
let offset = (page - 1) * 50 || 0;
let where = {influencer_id: options.influencers.id};
return db.notifications.findAll({
attributes: [[db.Sequelize.fn("MAX", db.Sequelize.col('id')), 'id']],
where: where,
order: [[db.Sequelize.fn("MAX", db.Sequelize.col('created_at')), 'DESC']],
limit: 50,
offset: offset,
group: ['creative_id', 'invite_id', 'line_item_id']
})
.then(notifications => {
if (!!notifications) {
options.notifications = notifications;
return Promise.resolve(options);
} else {
return Promise.resolve(options);
}
})
.then(options => db.notifications.findAll({
where: {id: {$in: options.notifications.map(n => n.id)}},
order: [['created_at', 'DESC']],
include: [{
model: db.creatives,
include: [{
model: db.invites,
include: [db.creatives, {
model: db.initiatives,
paranoid: false,
include: [db.platforms, {model: db.campaigns, paranoid: false, include: [db.brands]}, db.networks]
}, {model: db.accounts, paranoid: false}]
}]
},
{
model: db.invites,
include: [db.creatives, {
model: db.initiatives,
paranoid: false,
include: [db.platforms, {model: db.campaigns, paranoid: false, include: [db.brands]}, db.networks]
}, db.accounts]
},
db.line_items
]
})
).then(notifications => {
options.notifications = notifications;
return Promise.resolve(options);
});
}