UNPKG

ghost

Version:

The professional publishing platform

127 lines (118 loc) 2.84 kB
const allowedIncludes = ['count.posts', 'count.members', 'count.active_members']; const newslettersService = require('../../services/newsletters'); /** @type {import('@tryghost/api-framework').Controller} */ const controller = { docName: 'newsletters', browse: { headers: { cacheInvalidate: false }, options: [ 'include', 'filter', 'fields', 'limit', 'order', 'page' ], validation: { options: { include: { values: allowedIncludes } } }, permissions: true, query(frame) { return newslettersService.browse(frame.options); } }, read: { headers: { cacheInvalidate: false }, options: [ 'include', 'fields', 'debug', // NOTE: only for internal context 'forUpdate', 'transacting' ], data: [ 'id', 'slug', 'uuid' ], validation: { options: { include: { values: allowedIncludes } } }, permissions: true, async query(frame) { return newslettersService.read(frame.data, frame.options); } }, add: { statusCode: 201, headers: { cacheInvalidate: true }, options: [ 'include', 'opt_in_existing' ], validation: { options: { include: { values: allowedIncludes } } }, permissions: true, async query(frame) { return newslettersService.add(frame.data.newsletters[0], frame.options); } }, edit: { headers: { cacheInvalidate: true }, options: [ 'id', 'include' ], validation: { options: { id: { required: true }, include: { values: allowedIncludes } } }, permissions: true, async query(frame) { return newslettersService.edit(frame.data.newsletters[0], frame.options); } }, verifyPropertyUpdate: { headers: { cacheInvalidate: false }, permissions: { method: 'edit' }, data: [ 'token' ], async query(frame) { return newslettersService.verifyPropertyUpdate(frame.data.token); } } }; module.exports = controller;