UNPKG

@speakr/speakr-module-services

Version:
130 lines (118 loc) 2.83 kB
'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; }); }