ghost
Version:
The professional publishing platform
212 lines (199 loc) • 4.55 kB
JavaScript
const commentsService = require('../../services/comments');
const ALLOWED_INCLUDES = ['member', 'replies', 'replies.member', 'replies.count.likes', 'replies.liked', 'count.replies', 'count.likes', 'liked', 'post', 'parent'];
const UNSAFE_ATTRS = ['status'];
/** @type {import('@tryghost/api-framework').Controller} */
const controller = {
docName: 'comments',
browse: {
headers: {
cacheInvalidate: false
},
options: [
'post_id',
'include',
'page',
'limit',
'fields',
'filter',
'order',
'debug'
],
validation: {
options: {
include: ALLOWED_INCLUDES
}
},
permissions: true,
query(frame) {
return commentsService.controller.browse(frame);
}
},
replies: {
headers: {
cacheInvalidate: false
},
options: [
'include',
'page',
'limit',
'fields',
'filter',
'order',
'debug',
'id'
],
validation: {
options: {
include: ALLOWED_INCLUDES
}
},
permissions: 'browse',
query(frame) {
return commentsService.controller.replies(frame);
}
},
read: {
headers: {
cacheInvalidate: false
},
options: [
'include'
],
data: [
'id',
'email'
],
validation: {
options: {
include: ALLOWED_INCLUDES
}
},
permissions: true,
query(frame) {
return commentsService.controller.read(frame);
}
},
edit: {
headers: {
cacheInvalidate: false
},
options: [
'id',
'include'
],
validation: {
options: {
include: {
values: ALLOWED_INCLUDES
},
id: {
required: true
}
}
},
permissions: true,
query(frame) {
return commentsService.controller.edit(frame);
}
},
add: {
statusCode: 201,
headers: {
cacheInvalidate: false
},
options: [
'include'
],
validation: {
options: {
include: ALLOWED_INCLUDES
},
data: {
post_id: {
required: true
}
}
},
permissions: {
unsafeAttrs: UNSAFE_ATTRS
},
query(frame) {
return commentsService.controller.add(frame);
}
},
destroy: {
statusCode: 204,
headers: {
cacheInvalidate: false
},
options: [
'include',
'id'
],
validation: {
options: {
include: ALLOWED_INCLUDES
}
},
permissions: true,
query() {
return commentsService.controller.destroy();
}
},
counts: {
headers: {
cacheInvalidate: false
},
permissions: false,
options: [
'ids'
],
async query(frame) {
return commentsService.controller.count(frame);
}
},
like: {
statusCode: 204,
headers: {
cacheInvalidate: false
},
options: [
'id'
],
validation: {
},
permissions: true,
async query(frame) {
return await commentsService.controller.like(frame);
}
},
unlike: {
statusCode: 204,
headers: {
cacheInvalidate: false
},
options: [
'id'
],
validation: {},
permissions: true,
async query(frame) {
return await commentsService.controller.unlike(frame);
}
},
report: {
statusCode: 204,
headers: {
cacheInvalidate: false
},
options: [
'id'
],
validation: {},
permissions: true,
async query(frame) {
await commentsService.controller.report(frame);
}
}
};
module.exports = controller;