На каком уровне я должен проверить, пытается ли пользователь удалить свой собственный комментарий (а не комментарии других пользователей) в приложении Express. js, где контроллер обрабатывает все HTTP-логики c, а служба обрабатывает бизнес-логи c и модели обрабатывают logi c базы данных. Удаление комментария пользователя выполняется с помощью этого рабочего процесса:
// This is in the routes file:
app.delete("/comments/:commentId", authenticationMiddleware, commentController.commentsDelete);
// the authentication middlerware simply checks a JWT token, queries for the user in the database and adds it to req.user
// This is in the controllers file:
commentsDelete(req, res, next) {
const commentId = extractAndValidateRequestParameters(req);
commentService.deleteComment(commentId);
}
// This is the services file:
deleteComment(commentId) {
callExternalAPIsAndDoLogging()
commentModel.deleteComment(commentId)
}
//this is the models file:
commentModel.deleteComment = (commentId) => {
callCommentModelToCheckThatCommentHasNoReplies(commentId)
commentModel.deleteOne({id: commentId})
}
Я обнаружил, что ни один из слоев не подходит для этого типа журнала, например:
- контроллер не должен иметь дело со структурой базы данных
- служба не должна обрабатывать авторизацию
- модель не должна заботиться о том, кто пытается получить доступ к какому ресурсу.
I я также пытаюсь свести к минимуму количество запросов к базе данных, поскольку она будет содержать большое количество комментариев, а другие улучшения производительности недостижимы.