From 859f55cbde886d788fd1b267bb6b9858cf763ec6 Mon Sep 17 00:00:00 2001 From: Danila_Mochalov Date: Tue, 18 Apr 2023 09:54:27 +0400 Subject: [PATCH] Lab5 --- .gitignore | 1 + data.mv.db | Bin 143360 -> 94208 bytes .../lab1/lab34/controller/ProfileDto.java | 5 ++ .../mvc_controllers/FeedMvcController.java | 22 +++---- .../mvc_controllers/ProfileMvcController.java | 27 ++++++-- src/main/resources/templates/default.html | 2 +- .../resources/templates/editCommentModal.html | 2 +- .../resources/templates/editPostModal.html | 2 +- src/main/resources/templates/profiles.html | 60 ++++++++++++++++++ 9 files changed, 103 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/templates/profiles.html diff --git a/.gitignore b/.gitignore index c2065bc..b73c1e2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +front/lab4_vue_front/node_modules ### STS ### .apt_generated diff --git a/data.mv.db b/data.mv.db index 23341a7dfcff156160d9916417572497890060d6..04dc635f130b82310d83b61c8b830e8d5262e248 100644 GIT binary patch literal 94208 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 K{`Yb2$o~hDhuRSU diff --git a/src/main/java/com/webproglabs/lab1/lab34/controller/ProfileDto.java b/src/main/java/com/webproglabs/lab1/lab34/controller/ProfileDto.java index 398331f..8b97a48 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/controller/ProfileDto.java +++ b/src/main/java/com/webproglabs/lab1/lab34/controller/ProfileDto.java @@ -15,6 +15,9 @@ public class ProfileDto { private List comments = new ArrayList<>(); private List posts = new ArrayList<>(); + + public ProfileDto(){} + public ProfileDto(Profile profile){ this.id = profile.getId(); this.login = profile.getLogin(); @@ -32,7 +35,9 @@ public class ProfileDto { return id; } public String getLogin() {return login;} + public void setLogin(String login) {this.login = login;} public String getPassword() {return password;} + public void setPassword(String password) {this.password = password;} public List getComments() {return comments;} public List getPosts() {return posts;} } diff --git a/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/FeedMvcController.java b/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/FeedMvcController.java index 6ceecf8..a173e4c 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/FeedMvcController.java +++ b/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/FeedMvcController.java @@ -31,7 +31,7 @@ public class FeedMvcController { } @GetMapping(value = {"/{id}"}) - public String getFeedPageAuthorized(@PathVariable(required = false) Long id, Model model) { + public String getFeedPageAuthorized(@PathVariable Long id, Model model) { model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); model.addAttribute("posts", postService.findAllPosts().stream().map(PostDto::new).toList()); model.addAttribute("selectedProfile", new ProfileDto(profileService.findUser(id))); @@ -40,7 +40,7 @@ public class FeedMvcController { } @GetMapping(value= {"/filter/{id}/"}) - public String getFeedPageFiltered(@PathVariable(required = false) Long id, @RequestParam(value="searchField") String searchField, Model model) { + public String getFeedPageFiltered(@PathVariable Long id, @RequestParam(value="searchField") String searchField, Model model) { model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); model.addAttribute("posts", postService.findFilteredPosts(searchField).stream().map(PostDto::new).toList()); model.addAttribute("selectedProfile", new ProfileDto(profileService.findUser(id))); @@ -48,19 +48,19 @@ public class FeedMvcController { } @PostMapping(value={"/post/{id}/"}) - public String createPost(@PathVariable(required = false) Long id, @RequestParam(value="postInputField") String postInputField) { + public String createPost(@PathVariable Long id, @RequestParam(value="postInputField") String postInputField) { postService.addPost(postInputField, new ArrayList<>(), id); return "redirect:/feed/" + id.toString(); } @PostMapping(value = {"/deletePost/{id}/{authorId}"}) - public String deletePost(@PathVariable(required = false) Long id, @PathVariable(required = false) Long authorId) { + public String deletePost(@PathVariable Long id, @PathVariable Long authorId) { postService.deletePost(id); return "redirect:/feed/" + authorId.toString(); } @GetMapping(value = {"postModal/{id}/{authorId}"}) - public String getPostEditModal(@PathVariable(required = false) Long id,@PathVariable(required = false) Long authorId, Model model) { + public String getPostEditModal(@PathVariable Long id,@PathVariable Long authorId, Model model) { model.addAttribute("selectedPost", new PostDto(postService.findPost(id))); model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); model.addAttribute("posts", postService.findAllPosts().stream().map(PostDto::new).toList()); @@ -69,13 +69,13 @@ public class FeedMvcController { } @PostMapping(value = {"editPost/{id}/{authorId}/"}) - public String editPost(@PathVariable(required = false) Long id, @PathVariable(required = false) Long authorId, @RequestParam(value="postEditField") String postEditField) { + public String editPost(@PathVariable Long id, @PathVariable Long authorId, @RequestParam(value="postEditField") String postEditField) { postService.updatePost(id, postEditField); return "redirect:/feed/" + authorId.toString(); } @GetMapping(value = {"commentModal/{authorId}/{postId}"}) - public String getCommentModal(@PathVariable(required = false) Long authorId,@PathVariable(required = false) Long postId, Model model) { + public String getCommentModal(@PathVariable Long authorId,@PathVariable Long postId, Model model) { model.addAttribute("selectedPost", new PostDto(postService.findPost(postId))); model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); model.addAttribute("posts", postService.findAllPosts().stream().map(PostDto::new).toList()); @@ -84,19 +84,19 @@ public class FeedMvcController { } @PostMapping(value = {"comment/{authorId}/{postId}/"}) - public String createComment(@PathVariable(required = false) Long authorId,@PathVariable(required = false) Long postId, @RequestParam(value="commentInputField") String commentInputField) { + public String createComment(@PathVariable Long authorId,@PathVariable Long postId, @RequestParam(value="commentInputField") String commentInputField) { commentService.addComment(commentInputField, authorId, postId); return "redirect:/feed/" + authorId.toString(); } @PostMapping(value = {"/deleteComment/{id}/{authorId}"}) - public String deleteComment(@PathVariable(required = false) Long id, @PathVariable(required = false) Long authorId) { + public String deleteComment(@PathVariable Long id, @PathVariable Long authorId) { commentService.deleteComment(id); return "redirect:/feed/" + authorId.toString(); } @GetMapping(value = {"commentEditModal/{id}/{authorId}"}) - public String getCommentEditModal(@PathVariable(required = false) Long id,@PathVariable(required = false) Long authorId, Model model) { + public String getCommentEditModal(@PathVariable Long id,@PathVariable Long authorId, Model model) { model.addAttribute("selectedComment", new CommentDto(commentService.findComment(id))); model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); model.addAttribute("posts", postService.findAllPosts().stream().map(PostDto::new).toList()); @@ -105,7 +105,7 @@ public class FeedMvcController { } @PostMapping(value = {"editComment/{authorId}/{commentId}/"}) - public String editComment(@PathVariable(required = false) Long authorId,@PathVariable(required = false) Long commentId, @RequestParam(value="commentEditField") String commentEditField) { + public String editComment(@PathVariable Long authorId,@PathVariable Long commentId, @RequestParam(value="commentEditField") String commentEditField) { commentService.updateComment(commentId, commentEditField); return "redirect:/feed/" + authorId.toString(); } diff --git a/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/ProfileMvcController.java b/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/ProfileMvcController.java index efd2e16..0621cff 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/ProfileMvcController.java +++ b/src/main/java/com/webproglabs/lab1/lab34/controller/mvc_controllers/ProfileMvcController.java @@ -4,9 +4,9 @@ import com.webproglabs.lab1.lab34.controller.ProfileDto; import com.webproglabs.lab1.lab34.services.ProfileService; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; @Controller @RequestMapping("/") @@ -22,9 +22,28 @@ public class ProfileMvcController { return "default"; } + @GetMapping(value={"profiles"}) + public String getProfiles(Model model) { + model.addAttribute("profiles", profileService.findAllUsers().stream().map(ProfileDto::new).toList()); + model.addAttribute("profileDto", new ProfileDto()); + return "profiles"; + } + @GetMapping(value = {"profile/{login}"}) - public String getProfile(@PathVariable(required = false) String login, Model model) { + public String getProfile(@PathVariable String login, Model model) { model.addAttribute("profile", new ProfileDto(profileService.findUserByLogin(login))); return "profilePage"; } + + @PostMapping(value = {"profile/{id}"}) + public String deleteProfile(@PathVariable Long id) { + profileService.deleteUser(id); + return "redirect:/profiles"; + } + + @PostMapping(value = {"profile/create/"}) + public String createProfile(@ModelAttribute ProfileDto profileDto) { + profileService.addUser(profileDto.getLogin(), profileDto.getPassword(), new ArrayList<>(), new ArrayList<>()); + return "redirect:/profiles"; + } } diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html index 4d91ccf..706ec28 100644 --- a/src/main/resources/templates/default.html +++ b/src/main/resources/templates/default.html @@ -21,7 +21,7 @@ diff --git a/src/main/resources/templates/editCommentModal.html b/src/main/resources/templates/editCommentModal.html index 1a3ccb9..7b2bdba 100644 --- a/src/main/resources/templates/editCommentModal.html +++ b/src/main/resources/templates/editCommentModal.html @@ -15,7 +15,7 @@ + + \ No newline at end of file