From 3742a4afb7e0632c1ac3d7a78a324e9a3f0e182b Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Tue, 5 Oct 2021 13:17:18 +0200 Subject: [PATCH] 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. --- core/boot.js | 2 + core/server/services/offers/index.js | 1 + core/server/services/offers/service.js | 53 ++++++++++++++++++++++++++ package.json | 2 + yarn.lock | 10 +++++ 5 files changed, 68 insertions(+) create mode 100644 core/server/services/offers/index.js create mode 100644 core/server/services/offers/service.js diff --git a/core/boot.js b/core/boot.js index 017a198658..d70232a484 100644 --- a/core/boot.js +++ b/core/boot.js @@ -191,6 +191,7 @@ async function initServices({config}) { debug('Begin: Services'); const stripe = require('./server/services/stripe'); const members = require('./server/services/members'); + const offers = require('./server/services/offers'); const permissions = require('./server/services/permissions'); const xmlrpc = require('./server/services/xmlrpc'); const slack = require('./server/services/slack'); @@ -212,6 +213,7 @@ async function initServices({config}) { await Promise.all([ members.init(), + offers.init(), permissions.init(), xmlrpc.listen(), slack.listen(), diff --git a/core/server/services/offers/index.js b/core/server/services/offers/index.js new file mode 100644 index 0000000000..102ef66d4f --- /dev/null +++ b/core/server/services/offers/index.js @@ -0,0 +1 @@ +module.exports = require('./service'); diff --git a/core/server/services/offers/service.js b/core/server/services/offers/service.js new file mode 100644 index 0000000000..703e296100 --- /dev/null +++ b/core/server/services/offers/service.js @@ -0,0 +1,53 @@ +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 +}; diff --git a/package.json b/package.json index ba3a99dead..604e0f8475 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@tryghost/email-analytics-provider-mailgun": "1.0.2", "@tryghost/email-analytics-service": "1.0.2", "@tryghost/errors": "0.2.16", + "@tryghost/express-dynamic-redirects": "^0.1.0", "@tryghost/helpers": "1.1.52", "@tryghost/image-transform": "1.0.16", "@tryghost/job-manager": "0.8.10", @@ -78,6 +79,7 @@ "@tryghost/members-api": "2.0.0", "@tryghost/members-csv": "1.1.7", "@tryghost/members-importer": "0.3.3", + "@tryghost/members-offers": "0.2.1", "@tryghost/members-ssr": "1.0.14", "@tryghost/mw-session-from-token": "0.1.25", "@tryghost/nodemailer": "0.3.3", diff --git a/yarn.lock b/yarn.lock index c48692fdd2..751b1faa33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1319,6 +1319,11 @@ "@tryghost/ignition-errors" "^0.1.0" lodash "^4.17.21" +"@tryghost/express-dynamic-redirects@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@tryghost/express-dynamic-redirects/-/express-dynamic-redirects-0.1.0.tgz#85c6caa2887034ea8064a40ca0622a87e4000c4e" + integrity sha512-C9594LRjH3wsAWUoMCb5sZg/1Ifrn/O2aQeWQeBDgqUWAScmtUuIpkPNTRrq0cZ1Yv4ig5gWMKv4YSe5TdAVdA== + "@tryghost/helpers@1.1.52": version "1.1.52" resolved "https://registry.yarnpkg.com/@tryghost/helpers/-/helpers-1.1.52.tgz#e30bd367ea62d1b27e59abfa8e8ed8c3e072b74e" @@ -1522,6 +1527,11 @@ "@tryghost/tpl" "^0.1.3" moment-timezone "0.5.23" +"@tryghost/members-offers@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@tryghost/members-offers/-/members-offers-0.2.1.tgz#e6070df6156b9c73dd73ef7b37cef30c0b5a3046" + integrity sha512-FLiwWBHXo4Rt9Ei1liZYnfkb23NyvyeAdFE2GoIPVIoRrAq+Di19Df44QhAt+ixcrpS9ShNOwmJHYoySkYEgDA== + "@tryghost/members-ssr@1.0.14": version "1.0.14" resolved "https://registry.yarnpkg.com/@tryghost/members-ssr/-/members-ssr-1.0.14.tgz#8de4aca6c788f95aad52386f055ff2f5b1c7559c"