UNPKG

@speakr/speakr-module-services

Version:
515 lines (501 loc) • 17.6 kB
"use strict"; const db = require("../../db/"); module.exports = { index, byNetworkIdHash, indexWithAssociations, byId, byIdHash, list, byInitiativeId, reportByIdHash }; function index(options) { return db.campaigns .findAll() .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } function byNetworkIdHash(options) { return db.networks .find({ where: { id_hash: options.req.params.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; const where = { network_id: network_id }; return db.campaigns .findAll({ order: "created_at desc", where: where, include: [ db.brands, db.agencies, { model: db.networks, attributes: ["id_hash"] } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { console.log(error); return Promise.reject({ code: 400, message: `Could not find any campaigns for the network id hash of ${ options.req.params.network_id_hash }`, purpose: "Network has no campaigns" }); }); }); } function indexWithAssociations(options) { return db.networks .find({ where: { id_hash: options.req.headers.networkidhash }, attributes: ["id"] }) .then(n => { const network_id = n.dataValues.id; const where = network_id === 1 ? {} : { network_id: network_id }; return db.campaigns .findAll({ order: "created_at desc", where: where, include: [ { model: db.initiatives, required: false, include: [db.platforms, db.statuses] }, { model: db.contacts }, { model: db.networks }, { model: db.agencies, required: false }, { model: db.brands, required: false } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); }); } function byId(options) { let where = { id: options.req.id }; if (options.req.headers.networkidhash) { return db.networks .find({ where: { id_hash: options.req.headers.networkidhash }, attributes: ["id"] }) .then(n => { const network_id = n.dataValues.id; let where = { id: options.req.id, network_id: network_id }; return db.campaigns .findOne({ where, include: [ { model: db.initiatives, required: false, include: [db.platforms, db.statuses] }, { model: db.contacts }, { model: db.brands, required: true }, { model: db.agencies, required: true } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); }); } else { let where = { id: options.req.id }; return db.campaigns .findOne({ where, include: [ { model: db.initiatives, required: false, include: [db.platforms, db.statuses] }, { model: db.contacts }, { model: db.brands, required: true }, { model: db.agencies, required: true } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } } function byIdHash(options) { if (options.req.headers.networkidhash) { return db.networks .find({ where: { id_hash: options.req.headers.networkidhash }, attributes: ["id"] }) .then(n => { const network_id = n.dataValues.id; let where; if (options.req.headers.networkidhash === "PrqitYPaJK") { where = { id_hash: options.req.params.id_hash }; } else { where = { id_hash: options.req.params.id_hash, network_id: network_id }; } return db.campaigns .findOne({ where, include: [ { model: db.initiatives, required: false, include: [db.platforms, db.statuses] }, { model: db.contacts }, { model: db.point_of_contacts }, { model: db.brands, required: true }, { model: db.agencies, required: true } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); }); } else { let where = { id_hash: options.req.params.id_hash }; return db.campaigns .findOne({ where, include: [ { model: db.initiatives, required: false, include: [db.platforms, db.statuses] }, { model: db.contacts }, { model: db.point_of_contacts }, { model: db.brands, required: true }, { model: db.agencies, required: true } ] }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } } function list(options) { if (options.req.headers.networkidhash) { return db.networks .find({ where: { id_hash: options.req.headers.networkidhash }, attributes: ["id", "title"], order: "title asc" }) .then(n => { const where = n.dataValues.id === 1 ? null : { where: { network_id: n.dataValues.id } }; return db.campaigns .findAll(where) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); }); } else { return db.campaigns .findAll({ attributes: ["id", "title"], order: "title asc" }) .then(campaigns => { if (!!campaigns) { options.campaigns = campaigns; return Promise.resolve(options); } else { return Promise.resolve(options); } }) .catch(err => { return Promise.reject(err); }); } } function byInitiativeId(options) { const id = options.initiatives.dataValues ? options.initiatives.dataValues.campaign_id : options.initiatives.campaign_id; const where = { id }; return db.campaigns .findOne({ where }) .then(campaign => { if (!campaign) throw new Error("no campaign"); options.campaigns = campaign.dataValues ? campaign.dataValues : campaign; return options; }) .catch(err => { return Promise.reject({ code: 404, message: "Can not find campaign", purpose: err.message }); }); } function reportByIdHash(options) { if ( options.req.headers.networkidhash && !options.req.params.public_report ) { return db.networks .find({ where: { id_hash: options.req.headers.networkidhash }, attributes: ["id"] }) .then(n => { const network_id = n.dataValues.id; let where = { id_hash: options.req.params.id_hash, network_id: network_id }; return db.campaigns .findOne({ where: { id_hash: options.req.params.id_hash }, include: [ db.campaign_reports_custom, { model: db.initiatives, required: false, include: [db.platforms, db.statuses] } ] }) .then(campaign => { if (!!campaign) { options.campaigns = campaign; return db.tracking_stats .findAll({ where: { campaign_id_hash: campaign.id_hash } }) .then(stats => { options.tracking_stats = stats || []; return options; }); } else { return options; } }) .then(options => { const creative_id_hashes = options.tracking_stats ? options.tracking_stats.map( stat => stat.creative_id_hash ) : []; return db.creatives .findAll({ where: { id_hash: { $in: creative_id_hashes } }, include: [db.initiatives] }) .then(creatives => { if (creatives) { options.creatives = creatives; return options; } else { Promise.resolve(options); } }); }) .catch(err => { return Promise.reject(err); }); }); } else { return db.campaigns .findOne({ where: { id_hash: options.req.params.id_hash }, include: [ db.campaign_reports_custom, { model: db.initiatives, required: false, include: [db.platforms, db.statuses] } ] }) .then(campaign => { if (!!campaign) { options.campaigns = campaign; return db.tracking_stats .findAll({ where: { campaign_id_hash: campaign.id_hash } }) .then(stats => { options.tracking_stats = stats || []; return options; }); } else { return options; } }) .then(options => { const creative_id_hashes = options.tracking_stats.length ? options.tracking_stats.map(stat => stat.creative_id_hash) : []; return db.creatives .findAll({ where: { id_hash: { $in: creative_id_hashes } }, include: [db.initiatives] }) .then(creatives => { if (creatives) { options.creatives = creatives; return options; } else { Promise.resolve(options); } }); }) .catch(err => { return Promise.reject(err); }); } }