143 lines
7.6 KiB
Java
143 lines
7.6 KiB
Java
package com.webproglabs.lab1.mvc;
|
|
|
|
import com.webproglabs.lab1.dto.CommentDto;
|
|
import com.webproglabs.lab1.dto.PostDto;
|
|
import com.webproglabs.lab1.dto.TopicDto;
|
|
import com.webproglabs.lab1.dto.UserDto;
|
|
import com.webproglabs.lab1.services.CommentService;
|
|
import com.webproglabs.lab1.services.PostService;
|
|
import com.webproglabs.lab1.services.TopicService;
|
|
import com.webproglabs.lab1.services.UserService;
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.ui.Model;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
@Controller
|
|
@RequestMapping("/feed")
|
|
public class FeedMvcController {
|
|
private final UserService userService;
|
|
private final PostService postService;
|
|
private final CommentService commentService;
|
|
private final TopicService topicService;
|
|
|
|
public FeedMvcController(UserService userService, PostService postService, CommentService commentService, TopicService topicService) {
|
|
this.userService = userService;
|
|
this.postService = postService;
|
|
this.commentService = commentService;
|
|
this.topicService = topicService;
|
|
}
|
|
|
|
@GetMapping
|
|
public String getFeedPage(Model model) {
|
|
model.addAttribute("topics", topicService.findAllTopics().stream().map(TopicDto::new).toList());
|
|
return "feed";
|
|
}
|
|
|
|
@GetMapping(value = {"/{id}"})
|
|
public String getFeedPageWithTopic(@PathVariable Long id, Model model) {
|
|
model.addAttribute("profiles", userService.findAllUsers().stream().map(UserDto::new).toList());
|
|
model.addAttribute("posts", topicService.findTopicById(id).getPosts().stream().map(PostDto::new).toList());
|
|
model.addAttribute("topics", topicService.findAllTopics().stream().map(TopicDto::new).toList());
|
|
|
|
UserDetails principal = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
var user = userService.findUserByLogin(principal.getUsername());
|
|
model.addAttribute("selectedProfile", new UserDto(userService.findUserById(user.getId())));
|
|
|
|
model.addAttribute("selectedTopic", new TopicDto(topicService.findTopicById(id)));
|
|
|
|
return "feedPosts";
|
|
}
|
|
|
|
@GetMapping(value= {"/filter/{id}/"})
|
|
public String getFeedPageFiltered(@PathVariable Long id, @RequestParam(value="searchField") String searchField, Model model) {
|
|
model.addAttribute("profiles", userService.findAllUsers().stream().map(UserDto::new).toList());
|
|
model.addAttribute("topics", topicService.findAllTopics().stream().map(TopicDto::new).toList());
|
|
UserDetails principal = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
var user = userService.findUserByLogin(principal.getUsername());
|
|
model.addAttribute("selectedProfile", new UserDto(userService.findUserById(user.getId())));
|
|
model.addAttribute("selectedTopic", new TopicDto(topicService.findTopicById(id)));
|
|
|
|
model.addAttribute("posts", postService.findPostsInTopicByText(searchField, id).stream().map(PostDto::new).toList());
|
|
|
|
return "feedPosts";
|
|
}
|
|
|
|
@PostMapping(value={"/{topicId}/post/{id}/"})
|
|
public String createPost(@PathVariable Long topicId, @PathVariable Long id, @RequestParam(value="postInputField") String postInputField) {
|
|
postService.addPost(postInputField, id, topicId);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
@PostMapping(value = {"/deletePost/{id}/{topicId}"})
|
|
public String deletePost(@PathVariable Long id, @PathVariable Long topicId) {
|
|
postService.deletePost(id);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
@GetMapping(value = {"postModal/{id}/{topicId}"})
|
|
public String getPostEditModal(@PathVariable Long id,@PathVariable Long topicId, Model model) {
|
|
model.addAttribute("selectedPost", new PostDto(postService.findPostById(id)));
|
|
model.addAttribute("profiles", userService.findAllUsers().stream().map(UserDto::new).toList());
|
|
model.addAttribute("posts", topicService.findTopicById(topicId).getPosts().stream().map(PostDto::new).toList());
|
|
|
|
UserDetails principal = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
var user = userService.findUserByLogin(principal.getUsername());
|
|
model.addAttribute("selectedProfile", new UserDto(userService.findUserById(user.getId())));
|
|
model.addAttribute("selectedTopic", new TopicDto(topicService.findTopicById(topicId)));
|
|
return "editPostModal";
|
|
}
|
|
|
|
@PostMapping(value = {"editPost/{id}/{topicId}/"})
|
|
public String editPost(@PathVariable Long id, @PathVariable Long topicId, @RequestParam(value="postEditField") String postEditField) {
|
|
postService.updatePost(id, postEditField);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
@GetMapping(value = {"commentModal/{topicId}/{postId}"})
|
|
public String getCommentModal(@PathVariable Long topicId,@PathVariable Long postId, Model model) {
|
|
model.addAttribute("selectedPost", new PostDto(postService.findPostById(postId)));
|
|
model.addAttribute("profiles", userService.findAllUsers().stream().map(UserDto::new).toList());
|
|
model.addAttribute("posts", topicService.findTopicById(topicId).getPosts().stream().map(PostDto::new).toList());
|
|
|
|
UserDetails principal = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
var user = userService.findUserByLogin(principal.getUsername());
|
|
model.addAttribute("selectedProfile", new UserDto(userService.findUserById(user.getId())));
|
|
model.addAttribute("selectedTopic", new TopicDto(topicService.findTopicById(topicId)));
|
|
return "commentModal";
|
|
}
|
|
|
|
@PostMapping(value = {"comment/{authorId}/{topicId}/{postId}/"})
|
|
public String createComment(@PathVariable Long authorId, @PathVariable Long topicId, @PathVariable Long postId, @RequestParam(value="commentInputField") String commentInputField) {
|
|
commentService.addComment(commentInputField, authorId, postId);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
@PostMapping(value = {"/deleteComment/{id}/{topicId}"})
|
|
public String deleteComment(@PathVariable Long id, @PathVariable Long topicId) {
|
|
commentService.deleteComment(id);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
@GetMapping(value = {"commentEditModal/{id}/{topicId}"})
|
|
public String getCommentEditModal(@PathVariable Long id,@PathVariable Long topicId, Model model) {
|
|
model.addAttribute("selectedComment", new CommentDto(commentService.findCommentById(id)));
|
|
model.addAttribute("profiles", userService.findAllUsers().stream().map(UserDto::new).toList());
|
|
model.addAttribute("posts", topicService.findTopicById(topicId).getPosts().stream().map(PostDto::new).toList());
|
|
|
|
UserDetails principal = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
var user = userService.findUserByLogin(principal.getUsername());
|
|
model.addAttribute("selectedProfile", new UserDto(userService.findUserById(user.getId())));
|
|
model.addAttribute("selectedTopic", new TopicDto(topicService.findTopicById(topicId)));
|
|
return "editCommentModal";
|
|
}
|
|
|
|
@PostMapping(value = {"editComment/{topicId}/{commentId}/"})
|
|
public String editComment(@PathVariable Long topicId,@PathVariable Long commentId, @RequestParam(value="commentEditField") String commentEditField) {
|
|
commentService.updateComment(commentId, commentEditField);
|
|
return "redirect:/feed/" + topicId.toString();
|
|
}
|
|
|
|
}
|