UNPKG

@speakr/speakr-module-services

Version:
126 lines (116 loc) 5.44 kB
'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}); }