const models = require('../../models'); const allowedIncludes = ['count.posts', 'count.members']; const newslettersService = require('../../services/newsletters'); module.exports = { docName: 'newsletters', browse: { options: [ 'include', 'filter', 'fields', 'limit', 'order', 'page' ], validation: { options: { include: { values: allowedIncludes } } }, permissions: true, query(frame) { return models.Newsletter.findPage(frame.options); } }, read: { 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: { permissions: { method: 'edit' }, data: [ 'token' ], async query(frame) { return newslettersService.verifyPropertyUpdate(frame.data.token); } } };