UNPKG

paradigm-facebook-ia

Version:
93 lines (70 loc) 2.5 kB
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