@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
126 lines (116 loc) • 5.44 kB
JavaScript
'use strict';
let _ = require("lodash");
module.exports = {
influencerPublicData,
singleInfluencerPublicData,
single,
all
};
function influencerPublicData(options) {
options.creatives.rows = options.creatives.rows.map(creative => {
var d = new Date();
d.setHours(0,0,0,0);
let invite = creative.invite;
return {
id_hash: creative.id_hash,
submission_status: creative.submission_status,
offer_price: `$${parseFloat(creative.offer_price).toFixed(2)}`,
scheduled_at: creative.scheduled_at,
permalink: creative.permalink,
campaign: {
disapproved_words: invite.initiative.disapproved_words,
required_words: invite.initiative.required_words,
id_hash: invite.id_hash,
current_username: invite.account.current_username,
brand: invite.initiative.campaign.brand.name,
campaign: invite.initiative.campaign.title,
initiative: invite.initiative.name,
network: invite.initiative.network.name,
platform: invite.initiative.platform.name,
product_type: invite.initiative.product == 'Content Distribution' ? 'Brand Provided' : 'User Created',
media_type: invite.initiative.user_created_media_type ? invite.initiative.user_created_media_type.charAt(0).toUpperCase() + invite.initiative.user_created_media_type.slice(1) : null,
offer_price: invite.initiative.payment_type == 'Special' ? 'Special' :
(!!invite.offer_price ? `$${parseFloat(invite.offer_price).toFixed(2)}` : null),
end_time: invite.initiative.end_date,
status: parseInt(invite.creatives.length) > 0 ? `${invite.creatives.length} submission(s)` :
(invite.created_at > (new Date().getDate() - 2) ? 'New' : (invite.initiative.end_date < new Date()) ? 'Expired' : ''),
instructions_json: invite.initiative.instructions_json,
daily_creative_limit: {
allowed: invite.initiative.posts_per_day,
remaining: invite.initiative.posts_per_day - invite.creatives.filter(creative => creative.created_at > d).length
}
}
};
});
return Promise.resolve(options);
}
function singleInfluencerPublicData(options) {
let record = options.creatives;
options.creatives = {
id: record.id,
id_hash: record.id_hash,
submission_status_message: record.submission_status_message,
content: record.content,
created_at: record.created_at,
updated_at: record.updated_at,
scheduled_at: record.scheduled_at,
permalink: record.permalink,
link: record.link || (record.initiative ? record.initiative.target_link : null),
image_link: record.image_link || (record.initiative ? record.initiative.image_link : null),
video_link: record.video_link || (record.initiative ? record.initiative.video_link : null),
video_file_name: record.video_file_name,
image_file_name: record.image_file_name,
wrapper_link: record.wrapper_link,
submission_status: record.submission_status,
content_type: record.content_type,
youtube_video_title: record.youtube_video_title,
invite: record.invite ? {offer_price: record.invite.offer_price} : null,
initiative: record.initiative,
notes: record.creatives_notes,
campaign: record.initiative.campaign,
brand: record.initiative.campaign ? record.initiative.campaign.brand : null,
agency: record.initiative.campaign ? record.initiative.campaign.agency : null,
platform: record.initiative.platform,
network: record.initiative.network.name,
offer_price: record.initiative.payment_type == 'Special' ? 'Special' : `$${parseFloat(record.offer_price).toFixed(2)}`
};
return Promise.resolve(options);
}
function all(records) {
let subIds = [];
return Promise.all((records || []).map(submission => single(submission)));
}
function single(record) {
record.statusesAsc = _.sortBy(record.creatives_statuses, status => status.created_at);
let status = record.statusesAsc[record.statusesAsc.length - 1];
return Promise.resolve({
id: record.id,
content: record.content,
created_at: record.created_at,
updated_at: record.updated_at,
scheduled_at: record.scheduled_at,
permalink: record.permalink,
link: record.link,
video_file_name: record.video_file_name,
image_file_name: record.image_file_name,
wrapper_link: record.wrapper_link,
submission_status: record.submission_status,
image_link: record.image_link,
video_link: record.video_link,
status: status ? {message: status.message, type: status.creatives_status_type ? status.creatives_status_type.type : null } : null,
content_type: record.content_type,
youtube_video_title: record.youtube_video_title,
avatar: record.account.platform_user_image,
invite: record.invite ? {offer_price: record.invite.offer_price} : null,
initiative: record.initiative,
notes: record.creatives_notes,
account: record.account,
in_network: record.account.accounts_network ? record.account.accounts_network : null,
account_category: record.account.accounts_category ? record.account.accounts_category : null,
influencer_status: record.account.influencer ? record.account.influencer : null,
campaign: record.initiative.campaign,
brand: record.initiative.campaign ? record.initiative.campaign.brand : null,
agency: record.initiative.campaign ? record.initiative.campaign.agency : null,
metrics: record.account.metric || {},
platform: record.initiative.platform});
}