@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
303 lines (281 loc) • 7.18 kB
JavaScript
"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"
});
})
}