paradigm-facebook-ia
Version:
Paradigm Facebook Instant Articles
93 lines (70 loc) • 2.5 kB
JavaScript
const Job = require('structure-job')
const {ApplicationModel} = require('structure-applications')
const {DocumentModel} = require('paradigm-documents')
class CreateUpdateArticleJob extends Job {
constructor(options = {}) {
super(Object.assign({}, {
label: 'Create Or Update Facebook Instant Article',
priority: 'high',
numRetries: 60, // We sometimes need to wait for Facebook to finish imports
table: 'jobs_create_update_instant_article_article'
}, options))
this.applicationId = options.applicationId
this.logger = options.logger || console
if(!this.logger.debug) {
this.logger.debug = console.log.bind(console)
}
this.organizationId = options.organizationId
}
async handler(job) {
try {
this.logger.debug(
'Creating or updating facebook instant article',
{data: job.data}
)
const documentModel = new DocumentModel({
organizationId: this.organizationId,
applicationId: this.applicationId,
logger: this.logger,
})
const doc = await documentModel.getById(job.data.documentId)
if (!doc) {
throw 'Document not found'
}
const applicationModel = new ApplicationModel({
organizationId: this.organizationId,
logger: this.logger,
})
const app = await applicationModel.getById(doc.applicationId)
this.logger.debug(
'Got app for creating or updating facebook instant article',
{data: job.data, doc: doc.id, app: app.id}
)
if (!app.facebook || !app.facebook.pageAccessToken || !app.facebook.pageId) {
this.logger.debug('Facebook IA not set up for application')
return
}
const FacebookInstantArticleModel = require('../models/facebook-instant-article')
const facebookInstantArticleModel = new FacebookInstantArticleModel({
organizationId: this.organizationId,
applicationId: this.applicationId,
logger: this.logger
})
await facebookInstantArticleModel.createOrUpdateForDocument(job.data.documentId)
this.logger.debug(
'Finished creating or updating facebook instant article',
{data: job.data, doc: doc.id, app: app.id}
)
} catch(error) {
this.logger.error(
'Failed to create or update facebook instant article',
{
data: job.data,
error
}
)
throw error
}
}
}
module.exports = CreateUpdateArticleJob