diff --git a/docs/src/en/reference/server/api.md b/docs/src/en/reference/server/api.md index 581fa2f1c96..1628c058ae4 100644 --- a/docs/src/en/reference/server/api.md +++ b/docs/src/en/reference/server/api.md @@ -99,3 +99,17 @@ POST /api/article | Parameter | Type | Description | | --------- | ------ | ---------------------- | | path | string | Article id for comment | + +### Delete article comments + +Delete all comment for provided article path. If path is provided with '/' at the end then all comments that contains this path will be deleted. Otherwise comments where url fully match path will be deleted. + +```http +DELETE /api/article +``` + +**Parameters**: + +| Parameter | Type | Description | +| --------- | ------ | ---------------------- | +| path | string | Article id for comment | diff --git a/packages/server/src/controller/article.js b/packages/server/src/controller/article.js index 3a1cf0be3b7..47260e07dca 100644 --- a/packages/server/src/controller/article.js +++ b/packages/server/src/controller/article.js @@ -90,4 +90,15 @@ module.exports = class extends BaseRest { return this.jsonOrSuccess(deprecated ? ret[0][type] : [ret[0][type]]); } + + async deleteAction() { + let { path } = this.get(); + + // if last symbol is '/' than all children articles will be deleted + // otherwise only exactly matched + const where = path[path.length - 1] === '/' ? { url: ['like', `${path}%`] } : { url: path }; + await this.getModel('Comment').delete(where); + + return this.success(); + } }; diff --git a/packages/server/src/logic/article.js b/packages/server/src/logic/article.js index 0d48083b2a8..4d727b9ce50 100644 --- a/packages/server/src/logic/article.js +++ b/packages/server/src/logic/article.js @@ -24,4 +24,15 @@ module.exports = class extends Base { }, }; } + + deleteAction() { + const { path } = this.get(); + + this.rules = { + path: { + string: true, + required: !path, + } + } + } };