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));