0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00
ghost/core/server/services/offers/service.js
Fabien O'Carroll 3742a4afb7 Added Offers service
refs https://github.com/TryGhost/Team/issues/1083

This adds the Offers service which will allow us to build out an Admin
API to communicate with it. As well as wiring up the redirects to the
site app.
2021-10-06 12:33:19 +02:00

53 lines
1.7 KiB
JavaScript

const labs = require('../../../shared/labs');
const events = require('../../lib/common/events');
const DynamicRedirectManager = require('@tryghost/express-dynamic-redirects');
const OffersModule = require('@tryghost/members-offers');
const stripeService = require('../stripe');
const config = require('../../../shared/config');
const urlUtils = require('../../../shared/url-utils');
const models = require('../../models');
const redirectManager = new DynamicRedirectManager({
permanentMaxAge: config.get('caching:customRedirects:maxAge')
}, urlUtils);
module.exports = {
async init() {
const offersModule = OffersModule.create({
OfferModel: models.Offer,
redirectManager: redirectManager,
stripeAPIService: stripeService.api
});
this.api = offersModule.api;
if (labs.isSet('offers')) {
// handles setting up redirects
await offersModule.init();
}
// TODO: Delete after GA
let offersEnabled = labs.isSet('offers');
events.on('settings.labs.edited', async () => {
if (labs.isSet('offers') !== offersEnabled) {
offersEnabled = labs.isSet('offers');
if (offersEnabled) {
const offers = await this.api.listOffers();
for (const offer of offers) {
redirectManager.addRedirect(`/${offer.code}`, `/#/portal/offers/${offer.id}`, {permanent: false});
}
} else {
redirectManager.removeAllRedirects();
}
}
});
},
api: null,
middleware: redirectManager.handleRequest
};