From ff0b1a61b3c762459dc183acf2466c7ba63dc82c Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Tue, 5 Oct 2021 13:19:23 +0200 Subject: [PATCH] Added initial Offers API refs https://github.com/TryGhost/Team/issues/1083 This is a WIP for the Offers API so that Admin development can begin to use it. --- core/server/api/canary/index.js | 4 ++ core/server/api/canary/offers.js | 50 ++++++++++++++++++++++ core/server/web/api/canary/admin/routes.js | 5 +++ 3 files changed, 59 insertions(+) create mode 100644 core/server/api/canary/offers.js diff --git a/core/server/api/canary/index.js b/core/server/api/canary/index.js index e68a53a1c8..0300ac313a 100644 --- a/core/server/api/canary/index.js +++ b/core/server/api/canary/index.js @@ -85,6 +85,10 @@ module.exports = { return shared.pipeline(require('./members'), localUtils); }, + get offers() { + return shared.pipeline(require('./offers'), localUtils); + }, + get products() { return shared.pipeline(require('./products'), localUtils); }, diff --git a/core/server/api/canary/offers.js b/core/server/api/canary/offers.js new file mode 100644 index 0000000000..96ab9c9a08 --- /dev/null +++ b/core/server/api/canary/offers.js @@ -0,0 +1,50 @@ +const offersService = require('../../services/offers'); + +module.exports = { + docName: 'offers', + + browse: { + permissions: true, + async query(frame) { + const offers = await offersService.api.listOffers(); + frame.response = { + offers + }; + } + }, + + read: { + data: ['id'], + permissions: true, + async query(frame) { + const offer = await offersService.api.getOffer(frame.data); + frame.response = { + offers: [offer] + }; + } + }, + + edit: { + options: ['id'], + permissions: true, + async query(frame) { + const offer = await offersService.api.updateOffer({ + ...frame.data.offers[0], + id: frame.options.id + }); + frame.response = { + offers: [offer] + }; + } + }, + + add: { + permissions: true, + async query(frame) { + const offer = await offersService.api.createOffer(frame.data.offers[0]); + frame.response = { + offers: [offer] + }; + } + } +}; diff --git a/core/server/web/api/canary/admin/routes.js b/core/server/web/api/canary/admin/routes.js index b9c39cf1c6..253ea1d787 100644 --- a/core/server/web/api/canary/admin/routes.js +++ b/core/server/web/api/canary/admin/routes.js @@ -100,6 +100,11 @@ module.exports = function apiRoutes() { router.del('/members', mw.authAdminApi, http(api.members.bulkDestroy)); router.put('/members/bulk', mw.authAdminApi, http(api.members.bulkEdit)); + router.get('/offers', labs.enabledMiddleware('offers'), mw.authAdminApi, http(api.offers.browse)); + router.post('/offers', labs.enabledMiddleware('offers'), mw.authAdminApi, http(api.offers.add)); + router.get('/offers/:id', labs.enabledMiddleware('offers'), mw.authAdminApi, http(api.offers.read)); + router.put('/offers/:id', labs.enabledMiddleware('offers'), mw.authAdminApi, http(api.offers.edit)); + router.get('/members/stats/count', mw.authAdminApi, http(api.members.memberStats)); router.get('/members/stats/mrr', mw.authAdminApi, http(api.members.mrrStats)); router.get('/members/stats/subscribers', mw.authAdminApi, http(api.members.subscriberStats));