prism-ad-campaigns
Version:
Prism Ad Campaigns
89 lines (66 loc) • 2.12 kB
JavaScript
const Job = require('structure-job')
const {ApplicationModel} = require('structure-applications')
class CreateAdCampaignJob extends Job {
constructor(options = {}) {
super(Object.assign({}, {
interval: 1000,
label: 'Create Ad Campaign',
priority: 'high',
table: 'jobs_create_ad_campaign'
}, options))
this.logger = options.logger || console
if(!this.logger.debug) {
this.logger.debug = console.log.bind(console)
}
}
async handler(job) {
const organizationId = job.data.organizationId
const applicationId = job.data.applicationId
const document = job.data.document
this.logger.debug('Creating ad campaign', {
applicationId,
documentId: job.data.document.id,
})
try {
// Avoid circular import
const AdCampaignModel = require('../models/ad-campaign')
const applicationModel = new ApplicationModel({
logger: this.logger,
organizationId,
})
const app = await applicationModel.getById(applicationId)
if (
!app.facebook ||
!app.facebook.accessToken ||
!app.facebook.adAccountId ||
!app.facebook.appId ||
!app.facebook.appSecret ||
!app.facebook.pageId ||
!app.facebook.pixelId
) {
this.logger.error('Facebook ads not configured for app', {
applicationId,
documentId: job.data.document.id,
})
}
const adCampaignModel = new AdCampaignModel({
logger: this.logger,
organizationId,
applicationId
})
const date = new Date().toISOString().substr(5, 5)
const adCampaign = await adCampaignModel.create({
title: `${document.title} ${date}`,
link: `${app.host}${document.permalink}`,
headlines: [document.title],
texts: [],
digitalAssetIds: [document.featuredImageId],
})
this.logger.debug('Created ad campaign', {adCampaign})
} catch(err) {
this.logger.error('Error creating ad campaign', {err})
throw err
}
}
}
module.exports = CreateAdCampaignJob