paradigm-facebook-ia
Version:
Paradigm Facebook Instant Articles
105 lines (78 loc) • 2.56 kB
JavaScript
const Job = require('structure-job')
const {ApplicationModel} = require('structure-applications')
const FacebookIAAPI = require('../lib/facebook-ia-api')
class CheckImportJob extends Job {
constructor(options = {}) {
super(Object.assign({}, {
label: 'Check Facebook Instant Article Import',
priority: 'high',
numRetries: 60, // Keep checking for up to one hour
table: 'jobs_check_instant_article_article_import'
}, 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(
'Checking facebook instant article import',
{data: job.data}
)
const applicationModel = new ApplicationModel({
organizationId: this.organizationId,
logger: this.logger,
})
const app = await applicationModel.getById(this.applicationId)
const FacebookInstantArticleModel = require('../models/facebook-instant-article')
const facebookInstantArticleModel = new FacebookInstantArticleModel({
organizationId: this.organizationId,
applicationId: this.applicationId,
logger: this.logger
})
const client = new FacebookIAAPI(
app.facebook.pageId,
app.facebook.pageAccessToken
)
const res = await client.getArticleImportStatus(job.data.fbia.articleImportId)
this.logger.debug('Facebook Instant Article import status', {res})
if (res.status === 'SUCCESS') {
await facebookInstantArticleModel.updateById(
job.data.fbia.id,
{
importStatus: 'success',
articleId: res.instant_article.id,
}
)
} else if (res.status === 'FAILED') {
await facebookInstantArticleModel.updateById(
job.data.fbia.id,
{
importStatus: 'failed',
errors: res.errors
}
)
} else {
// Retry the job later
this.logger.debug(
'Article not finished importing, throwing to retry',
{data: job.data}
)
throw 'Article not finished importing'
}
} catch(error) {
this.logger.error(
'Failed to check facebook instant article import',
{
data: job.data,
error
}
)
throw error
}
}
}
module.exports = CheckImportJob