diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java index 014265aa40d8b1f39e424f5673690c1dc2b162d3..2617a3c3f8df33777cc5dabd9b693ee7e81ef069 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java @@ -35,6 +35,15 @@ public class CommentController extends BaseController { return commentController.getCommentList(token, projectId, columns, "", "", removed); } + @RequestMapping(value = "/projects/{projectId}/comments/{commentId}/", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public Map<String, Object> removeComment(// + @CookieValue(value = Configuration.AUTH_TOKEN) String token, // + @PathVariable(value = "projectId") String projectId, // + @PathVariable(value = "commentId") String commentId // + ) throws SecurityException, QueryException { + return commentController.removeComment(token, projectId, commentId); + } + @RequestMapping(value = "/projects/{projectId}/comments/models/{modelId}/bioEntities/reactions/{reactionId}", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) public List<Map<String, Object>> getCommentsByReaction(// diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java index 35da482c29358b56aa08828e6b70a813509507fa..a56a720513b5efbb56731c791d8d7c286fb97f81 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java @@ -51,7 +51,7 @@ public class CommentRestImpl extends BaseRestImpl { AuthenticationToken authenticationToken = getUserService().getToken(token); Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken); if (project == null) { - throw new QueryException("Project with given id doesn't exist"); + throw new ObjectNotFoundException("Project with given id doesn't exist"); } boolean isAdmin = getUserService().userHasPrivilege(authenticationToken, PrivilegeType.EDIT_COMMENTS_PROJECT, project); Set<String> columnsSet = createCommentColumnSet(columns, isAdmin); @@ -323,4 +323,19 @@ public class CommentRestImpl extends BaseRestImpl { return preparedComment(comment, createCommentColumnSet("", isAdmin), isAdmin); } + public Map<String, Object> removeComment(String token, String projectId, String commentId) throws SecurityException, QueryException { + AuthenticationToken authenticationToken = getUserService().getToken(token); + Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken); + if (project == null) { + throw new ObjectNotFoundException("Project with given id doesn't exist"); + } + Comment comment = commentService.getCommentById(commentId); + if (comment == null || comment.getModelData().getProject().getId() != project.getId()) { + throw new ObjectNotFoundException("Comment with given id doesn't exist"); + } + + commentService.deleteComment(comment, authenticationToken); + return okStatus(); + } + } diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java b/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java index 46de1b259c024f63105f07dff3ce1b045fb1c9c6..c27eea82cec7b868ef6610e70de715e82a9d7fd6 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java @@ -422,4 +422,26 @@ public class CommentService implements ICommentService { return comments; } + @Override + public void deleteComment(Comment comment, AuthenticationToken token) throws UserAccessException { + Project project = comment.getModelData().getProject(); + boolean editComments = userService.userHasPrivilege(token, PrivilegeType.EDIT_COMMENTS_PROJECT, project); + if (editComments || userService.getUserByToken(token).equals(comment.getUser())) { + comment.setDeleted(true); + commentDao.update(comment); + } else { + throw new UserAccessException("You have no privileges to remove the comment"); + } + } + + @Override + public Comment getCommentById(String commentId) { + int id = -1; + try { + id = Integer.parseInt(commentId); + } catch (NumberFormatException e) { + } + return commentDao.getById(id); + } + } diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java index b9fc7aa6965326acb6f769b26979250ded6a1163..06d32a16cc550af0da85dea6377d1931bda5ba79 100644 --- a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java +++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java @@ -59,6 +59,8 @@ public interface ICommentService { * why user wants to remove the comment */ void deleteComment(User loggedUser, String commentId, String reason); + + void deleteComment(Comment comment, AuthenticationToken token) throws UserAccessException; /** * Method returns all comments for a given map. @@ -115,4 +117,6 @@ public interface ICommentService { */ List<ElementIdentifierDetails> getElementInformationForResult(ElementIdentifier element, Model model); + Comment getCommentById(String commentId); + }