@PreAuthorize("isAuthenticated()")
  @RequestMapping(value = "/topic/update", method = RequestMethod.POST)
  public ModelAndView doUpdate(
      @RequestParam String text,
      @RequestParam int treeId,
      @RequestParam int topicId,
      HttpServletRequest request) {
    ModelAndView modelAndView =
        UserUtils.getModelWithUser(request, "topic/topic_show_page", userService);

    topicService.update(topicId, text);

    TopicDto topic = topicService.findById(topicId);
    modelAndView.addObject("topic", topic);
    modelAndView.addObject("treeId", treeId);

    return modelAndView;
  }
  @PreAuthorize("isAuthenticated()")
  @RequestMapping(value = "/topic/delete", method = RequestMethod.POST)
  public ModelAndView delete(
      @RequestParam int topicId, @RequestParam int treeId, HttpServletRequest request) {
    ModelAndView modelAndView =
        UserUtils.getModelWithUser(request, "topic/topics_list_page", userService);

    String login = request.getUserPrincipal().getName();
    UserDto user = userService.getUserByLogin(login);

    if (!userService.isAdmin(user)) {
      modelAndView.addObject("topic", topicService.findById(topicId));
      modelAndView.setViewName("topic/topic_show_page");
      return modelAndView;
    }

    TopicDto topic = topicService.findById(topicId);

    TopicTreeDto topicTree = topicTreeService.findById(treeId);
    List<TopicDto> topics = topicTree.getTopicList();
    topics.remove(topic);
    topicTree.setTopicList(topics);
    topicTreeService.update(topicTree);

    List<CommentDto> list = topic.getComments();

    topic.setComments(null);
    topicService.update(topic);

    for (CommentDto comment : list) {
      commentService.remove(comment.getId());
    }

    topicService.remove(topicId);

    modelAndView.addObject("topicList", topicTreeService.findById(treeId).getTopicList());
    modelAndView.addObject("treeId", treeId);
    modelAndView.addObject("topicId", topicId);
    return modelAndView;
  }