prism-ad-campaigns
Version:
Prism Ad Campaigns
182 lines (134 loc) • 3.84 kB
JavaScript
const RootController = require('structure-root-controller')
const errorCodes = require('structure-error-codes')
const StructureComposeError = require('structure-compose-error')
const AdCampaignModel = require('../models/ad-campaign')
const errorComposer = new StructureComposeError(errorCodes)
/**
* AdCampaignController Class
*
* @public
* @class AdCampaignController
*/
class AdCampaignController extends RootController {
/**
* AdCampaignController constructor
*
* @public
* @constructor
* @param {Object} options - Options
*/
constructor(options = {}) {
super(Object.assign({}, {
name: 'ad-campaign'
}, options))
}
/**
* Create new ad campaign
*
* @public
* @param {Object} req - Express req
* @param {Object} res - Express res
*/
async create(req, res) {
try {
const organizationId = req.headers.organizationid
const applicationId = req.headers.applicationid
const adCampaignModel = new AdCampaignModel({
logger: this.logger,
organizationId,
applicationId
})
return adCampaignModel.create(req.body)
} catch(err) {
this.logger.error('Error creating ad campaign', {err})
throw err
}
}
/**
* Update an ad campaign
*
* @public
* @param {Object} req - Express req
* @param {Object} res - Express res
*/
updateById(req, res) {
return new Promise(async (resolve, reject) => {
try {
const organizationId = req.headers.organizationid
const applicationId = req.headers.applicationid
const adCampaignModel = new AdCampaignModel({
logger: this.logger,
organizationId,
applicationId
})
const oldAdCampaign = await adCampaignModel.getById(req.params.id)
if (oldAdCampaign.status === 'active') {
return reject(errorComposer.compose('CANT_UPDATE_ACTIVE_AD_CAMPAIGN'))
}
const res = await adCampaignModel.updateById(req.params.id, req.body)
resolve(res)
} catch(err) {
if (err === 'Missing adAccountId') {
return reject(errorComposer.compose('ADACCOUNTID_MISSING'))
}
this.logger.error('Error updating ad campaign', {err})
reject(err)
}
})
}
/**
* Get all ad campaigns
*
* @public
* @param {Object} req - Express req
* @param {Object} res - Express res
*/
async getAll(req, res) {
try {
const organizationId = req.headers.organizationid
const applicationId = req.headers.applicationid
const adCampaignModel = new AdCampaignModel({
logger: this.logger,
organizationId,
applicationId
})
const options = req.query ? {
orderBy: req.query.orderBy,
orderDir: req.query.orderDir,
page: Number(req.query.page),
limit: Number(req.query.limit)
} : {}
options.pagination = true
const pkg = await adCampaignModel.getAll(false, options)
pkg['ad-campaigns'] = pkg.results
delete pkg.results
return pkg
} catch(err) {
this.logger.error('Error getting all ad campaigns', {err})
throw err
}
}
/**
* Get ad campaign by id
*
* @public
* @param {Object} req - Express req
* @param {Object} res - Express res
*/
getById(req, res) {
try {
const organizationId = req.headers.organizationid
const applicationId = req.headers.applicationid
const adCampaignModel = new AdCampaignModel({
logger: this.logger,
organizationId,
applicationId
})
return adCampaignModel.getById(req.params.id)
} catch(err) {
this.logger.error('Error getting all ad campaigns', {err})
throw err
}
}
}
module.exports = AdCampaignController