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 37deda3587 Fixed handling of labs flag for Offers
no-issue

Because we only called `init` if the labs flag is enabled, when starting
up a site without the flag enabled - the listener for adding redirects
wasn't active. So new Offers would not have their redirects setup.
2021-10-12 15:20:31 +02:00

61 lines
2 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;
this.repository = offersModule.repository;
let initCalled = false;
if (labs.isSet('offers')) {
// handles setting up redirects
const promise = offersModule.init();
initCalled = true;
await promise;
}
// TODO: Delete after GA
let offersEnabled = labs.isSet('offers');
events.on('settings.labs.edited', async () => {
if (labs.isSet('offers') && !initCalled) {
const promise = offersModule.init();
initCalled = true;
await promise;
} else 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
};