UNPKG

@speakr/speakr-module-services

Version:
303 lines (281 loc) • 7.18 kB
"use strict"; const db = require('../../db/'); const influencers_session = require('./../influencers_session'); module.exports = { index, byNetworkIdHash, byParams, byId, byAccountId, byIdHash, byInvoiceId, oneByIdAndNetworkHash, byToken, byReferrer }; function byReferrer(options) { let page = options.page || 1; let offset = (page - 1) * 50; return db.influencers.findAll({ where: {referrer: options.influencers.id}, order: [['created_at', 'DESC']], limit: 50, offset: offset }) .then(influencers => { if (!!influencers) { options.influencers = influencers; } return Promise.resolve(options); }) } function byToken(options) { return influencers_session.read(options) .then(options => { let where = { id: options.sessions.influencer_id }; return db.influencers.findOne( { where } ) }) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } else { return Promise.reject(options); } }) .catch(err => { return Promise.reject(err); }); } function byAccountId(options) { return db.accounts.findOne({ where: { id: options.accounts.id } }).then(account => { return db.influencers.findOne({ where: { id: account.influencer_id} }) }) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } function index(options) { let where = { status: {$in: ['New', 'Active']} }; return db.influencers.findAll({ where, include: [ { model: db.accounts, required: true } ] }) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } }).catch(err => { return Promise.reject(err); }); } function byNetworkIdHash(options) { const network_id_hash = options.req.params.network_id_hash; return db.networks.findOne({ where: {id_hash: network_id_hash}, attributes: ['id'] }) .then(network => { if(!network) { return Promise.reject({ code: 404, message: `Could not find the network with the network id hash of ${options.req.params.network_id_hash}`, purpose: "Network id hash could not be found" }); } const network_id = network.dataValues.id; return db.accounts_networks.findAll({ where: { network_id: network_id, deleted: false } }) .then(accounts => { return db.accounts.findAll({ where: { id: {$in: accounts.map(account => account.id)} }, attributes: ['influencer_id'] }) }) .then(accounts => { return db.influencers.findAll({ where: { id: {$in: accounts.map(account => account.influencer_id)} }, include: [{ model: db.accounts, include: [ {model: db.accounts_networks, attributes: ['network_id', 'external'], where: { deleted: false }, required: true}, {model: db.platforms, attributes:['id', 'name']} ] }] }) }) }) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject({ code: 404, message: `Could not find any influencers for the network id hash of ${options.req.params.network_id_hash}`, purpose: "Network has no influencers" }); }) } function byParams(options) { const network_id_hash = options.req.params.network_id_hash; const platform_id = Number(options.req.body.platform_id); const current_username_frag = options.req.body.current_username; return db.networks.findOne({ where: {id_hash: network_id_hash}, attributes: ['id'] }) .then(network => { if(!network) { return Promise.reject({ code: 404, message: `Could not find the network with the network id hash of ${options.req.params.network_id_hash}`, purpose: "Network id hash could not be found" }); } const network_id = network.dataValues ? network.dataValues.id : network.id; return db.accounts.findAll({ where: { current_username: { $iLike: `${current_username_frag}%`}, platform_id: platform_id }, include: [ { model: db.accounts_networks, where: {network_id: network_id, deleted: false}, required: true , include: [db.networks] }, db.platforms ] }) }) .then(accounts => { if(!!accounts) { options.accounts = accounts; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject({ code: 404, message: `Could not find any influencers with params of network: ${network_id_hash}, platform: ${platform_id}, handle text: ${current_username_frag}`, purpose: "No influencers match the parameters provided" }); }) } function byId(options) { let where = { id: options.influencers.id }; return db.influencers.findOne( { where } ) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } }).catch(err => { return Promise.reject(err); }); } function byIdHash(options) { let where = { id_hash: options.req.params.id_hash }; return db.influencers.findOne( { where } ) .then(influencers => { if(!!influencers) { options.influencers = influencers; return Promise.resolve(options); } }).catch(err => { return Promise.reject(err); }); } function byInvoiceId(options) { let where = { id: options.invoices.influencer_id }; return db.influencers.findOne({where}) .then(influencers => { if (!!influencers) { options.influencers = influencers.dataValues; return Promise.resolve(options); } }).catch(err => { return Promise.reject(err); }); } function oneByIdAndNetworkHash(options) { return db.networks.findOne({ where: {id_hash: options.req.body.network_id_hash}, attributes: ['id', 'name'] }) .then(networkObj => { options.network_id = networkObj.dataValues ? networkObj.dataValues.id : networkObj.id; options.network_name = networkObj.dataValues ? networkObj.dataValues.name : networkObj.name; return db.influencers.findOne({ where: {id: options.req.body.influencer_id}, paranoid: false, include: { model: db.accounts, paranoid: false, include:[ { where: { network_id: options.network_id }, model: db.accounts_networks, paranoid: false } ] } }) }) .then(influencer => { if(!!influencer) { options.influencers = influencer; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject({ code: 404, message: `Could not find an influencer with id ${options.req.body.influencer_id} for the network id hash of ${options.req.params.network_id_hash}`, purpose: "Network has no influencers" }); }) }