UNPKG

@speakr/speakr-module-services

Version:
224 lines (190 loc) • 5.31 kB
"use strict"; const db = require('../../db/'); module.exports = { index, byId, byIdHash, byInitiativeIdHash, byIdHashSingle, byPage, byAccountId, byIdOrCreate, byInitiativeIdHashIncludeDeleted }; function index(options) { let where = { id_hash: options.req.params.id_hash }; return db.invites.findOne({ where }) .then(invites => { options.invites = invites; return Promise.resolve(options); }) } function byId(options, id) { let where = { id: options ? options.req.body.id : id }; return db.invites.findOne({ where, include: [db.accounts] }) .then(invites => { options.invites = invites; return Promise.resolve(options); }) } function byIdHash(options) { let where = { id_hash: options.req.params.id_hash }; return db.invites.findOne({ where, include: [db.accounts, { model: db.initiatives, where: { initiative_status_id: 2 }, required: true, include: [db.platforms, { model: db.campaigns, required: true, include: [db.brands, db.point_of_contacts] }, db.networks] }, db.creatives]}) .then(invites => { options.invites = invites; return Promise.resolve(options); }) } function byInitiativeIdHash(options) { let where = { id_hash: options.req.params.id_hash }; return db.initiatives.findOne({ where }) .then(initiatives => { options.initiatives = initiatives; let where = { initiative_id: initiatives.id }; return db.invites.findAll({ where, include: [ { model: db.accounts, include: [ { model: db.accounts_networks } ] } ]}) .then(invites => { options.invites = invites; return Promise.resolve(options) }) }).catch(err => { console.log(err); }); } function byInitiativeIdHashIncludeDeleted(options) { let where = { id_hash: options.req.params.id_hash }; return db.initiatives.findOne({ where }) .then(initiatives => { options.initiatives = initiatives; let where = { initiative_id: initiatives.id }; return db.invites.findAll({ where, include: [ { model: db.accounts, include: [ { model: db.accounts_networks } ] } ], paranoid: false}) .then(invites => { options.invites = invites; return Promise.resolve(options) }) }).catch(err => { console.log(err); }); } function byIdHashSingle(options) { const where = { id_hash: options.req.params.id_hash }; return db.invites.findOne({ where }) .then(invite => { if(!invite) throw new Error('Invite not found with ID_HASH'); options.invites = invite.dataValues ? invite.dataValues : invite; return Promise.resolve(options); }) .catch(err => { return Promise.reject(err) }) } function byPage(options) { let page = options.page || 1; let offset = (page - 1) * 50; let order = []; switch (options.sort) { case 'Biggest Offer': order = [['offer_price', 'DESC NULLS LAST']]; break; case 'Ending Soon': order = [db.Sequelize.literal('"invites"."initiative.end_date" ASC')]; break; default: order = [['updated_at', 'DESC']]; break; } let accountIds = options.accounts.map(account => account.id); let where = { account_id: { $in: accountIds } }; let totalCount = null; return db.invites.findAndCountAll({ where: where, order: order, paranoid: true, include: [{ model: db.initiatives, required: true, paranoid: false, where: db.Sequelize.literal('initiative.end_date > CURRENT_TIMESTAMP AND initiative.initiative_status_id = 2'), include: [{ model: db.campaigns, required: true, paranoid: false }] }], limit: 50, offset: offset }) .then(invites => { totalCount = invites.count; return db.invites.findAll({ where: {id: {$in: invites.rows.map(i => i.id)}}, order: order, include: [{ model: db.initiatives, paranoid: false, include: [{ model: db.campaigns, paranoid: false, include: [db.brands] }, db.platforms, db.networks] }, db.creatives, db.accounts] }) }) .then(invites => { if(!!invites) { options.invites = {count: totalCount, rows: invites}; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } function byAccountId(options){ const ids = options.accounts.map(account => account.id); return db.invites.findAll({ where: { account_id: { $in: ids }} }).then(invites => { options.invites = invites; return options; }) } function byIdOrCreate(id, account_id, initiative_id) { if(!id) { return db.invites.create({ account_id: account_id, initiative_id: initiative_id, offer_price: 1 }); } return db.invites.findOne({where: {id: id}}) .then(invite => { if(!invite) { return db.invites.create({ account_id: account_id, initiative_id: initiative_id, offer_price: 1 }); } return invite; }) }