@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
130 lines (118 loc) • 2.83 kB
JavaScript
'use strict';
const db = require('../../db');
module.exports = {
byPage,
byIdHash,
getLineItemsWithMoreData_singleInvoice,
byInvoiceNumber
};
function byPage(options) {
const page = options.page || 1;
const limit = 50;
return db.invoices.findAll({where: {influencer_id: options.influencers.id, status: 'pending'}})
.then(invoices =>
db.line_items.findAndCountAll({
where: {invoice_id: {$in: invoices.map(i=>i.id)}},
limit: limit,
offset: (page - 1) * limit,
include: [db.networks],
order: [['created_at', 'DESC']]
}))
.then(line_items => {
options.line_items = line_items;
return Promise.resolve(options);
});
}
function byIdHash(idHash) {
return db.line_items.findOne({
where: {
id_hash: idHash,
deleted_at: {$is: null}
},
include: [
{model: db.creatives, include: [db.accounts]}
]
})
}
function byInvoiceNumber(options) {
return db.line_items.findAll({
where: {invoice_id: options.invoices.id},
order: [['created_at', 'DESC']]
})
.then(line_items => {
options.lineItems = line_items;
return Promise.resolve(options)
})
.catch((err)=>{
console.log('\n\n ERR', err);
return Promise.reject(err);
})
}
function getLineItemsWithMoreData_singleInvoice(options) {
return byInvoiceNumber(options)
.then(options => {
const lineItems = options.lineItems.map(l => l.dataValues ? l.dataValues : l);
let promises = lineItems.map(l => {
switch(l.type) {
case 'creative':
return db.creatives.findOne({
where: { id: l.payable_id },
paranoid: false,
include: [
{
model: db.accounts,
paranoid: false
},
{
model: db.platforms,
paranoid: false
},
{
model: db.initiatives,
paranoid: false,
include: [
{
model: db.campaigns,
paranoid: false,
include: [
{
model: db.brands,
paranoid: false
}
]
}
]
}
]
}).then(c => {
return Object.assign({}, l, {creative: c});
})
break;
case 'referral':
return db.influencers.findOne({
where: { id: l.payable_id },
paranoid: false
}).then(r => {
return Object.assign({}, l, {referred: r});
})
break;
case 'campaign cost':
return db.campaigns.findOne({
where: { id: l.payable_id },
paranoid: false
}).then(camp => {
return Object.assign({}, l, {campaign: camp});
})
break;
default:
return l;
break
}
});
return db.Sequelize.Promise.all(promises);
})
.then(items => {
options.lineItems = items;
return options;
});
}