diff --git a/data.mv.db b/data.mv.db index 9377641..2f670b1 100644 Binary files a/data.mv.db and b/data.mv.db differ diff --git a/src/main/java/com/webproglabs/lab1/lab34/controller/CommentController.java b/src/main/java/com/webproglabs/lab1/lab34/controller/CommentController.java index 6b2bd7f..421c70a 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/controller/CommentController.java +++ b/src/main/java/com/webproglabs/lab1/lab34/controller/CommentController.java @@ -27,6 +27,13 @@ public class CommentController { .map(CommentDto::new) .toList(); } + @GetMapping("/find") + public List getFilteredComments(@RequestParam("text") String text) { + return commentService.findFilteredComments(text).stream() + .map(PostDto::new) + .toList(); + } + @PostMapping public CommentDto createComment(@RequestParam("text") String text, @RequestParam("ownerId") Long id, @RequestParam("postId") Long postId){ diff --git a/src/main/java/com/webproglabs/lab1/lab34/controller/PostController.java b/src/main/java/com/webproglabs/lab1/lab34/controller/PostController.java index a0551d7..da2f2a6 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/controller/PostController.java +++ b/src/main/java/com/webproglabs/lab1/lab34/controller/PostController.java @@ -27,6 +27,13 @@ public class PostController { .toList(); } + @GetMapping("/find") + public List getFilteredPosts(@RequestParam("text") String text) { + return postService.findFilteredPosts(text).stream() + .map(PostDto::new) + .toList(); + } + @PostMapping public PostDto createPost( @RequestParam("text") String text, diff --git a/src/main/java/com/webproglabs/lab1/lab34/repository/CommentRepository.java b/src/main/java/com/webproglabs/lab1/lab34/repository/CommentRepository.java index eeb72b8..28a53bf 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/repository/CommentRepository.java +++ b/src/main/java/com/webproglabs/lab1/lab34/repository/CommentRepository.java @@ -3,5 +3,8 @@ package com.webproglabs.lab1.lab34.repository; import com.webproglabs.lab1.lab34.model.Comment; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface CommentRepository extends JpaRepository { + List findByTextLike(String text); } diff --git a/src/main/java/com/webproglabs/lab1/lab34/repository/PostRepository.java b/src/main/java/com/webproglabs/lab1/lab34/repository/PostRepository.java index de6fc48..582553e 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/repository/PostRepository.java +++ b/src/main/java/com/webproglabs/lab1/lab34/repository/PostRepository.java @@ -4,5 +4,8 @@ import com.webproglabs.lab1.lab34.model.Comment; import com.webproglabs.lab1.lab34.model.Post; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface PostRepository extends JpaRepository { + List findByTextLike(String text); } diff --git a/src/main/java/com/webproglabs/lab1/lab34/services/CommentService.java b/src/main/java/com/webproglabs/lab1/lab34/services/CommentService.java index 14220f9..f6af98a 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/services/CommentService.java +++ b/src/main/java/com/webproglabs/lab1/lab34/services/CommentService.java @@ -39,6 +39,21 @@ public class CommentService { return commentRepository.findAll(); } + @Transactional + public List findFilteredComments(String filter) { + List postList = postRepository.findByTextLike("%" + filter + "%"); + List commentList = commentRepository.findByTextLike("%" + filter + "%"); + List allPosts = postRepository.findAll(); + for(Post post : allPosts) { + for (Comment comm : commentList) { + if (post.getComments().contains(comm) && !(postList.contains(post))) { + postList.add(post); + } + } + } + return postList; + } + @Transactional public Comment addComment(String text, Long profileId, Long postId) { if (!StringUtils.hasText(text)) { diff --git a/src/main/java/com/webproglabs/lab1/lab34/services/PostService.java b/src/main/java/com/webproglabs/lab1/lab34/services/PostService.java index 2e931a4..43a7584 100644 --- a/src/main/java/com/webproglabs/lab1/lab34/services/PostService.java +++ b/src/main/java/com/webproglabs/lab1/lab34/services/PostService.java @@ -3,6 +3,7 @@ package com.webproglabs.lab1.lab34.services; import com.webproglabs.lab1.lab34.model.Comment; import com.webproglabs.lab1.lab34.model.Post; import com.webproglabs.lab1.lab34.model.Profile; +import com.webproglabs.lab1.lab34.repository.CommentRepository; import com.webproglabs.lab1.lab34.repository.PostRepository; import com.webproglabs.lab1.lab34.repository.ProfileRepository; import org.springframework.stereotype.Service; @@ -16,10 +17,12 @@ import java.util.Optional; @Service public class PostService { private final PostRepository postRepository; + private final CommentRepository commentRepository; private final ProfileRepository profileRepository; - public PostService(PostRepository postRepository, ProfileRepository profileRepository) { + public PostService(PostRepository postRepository, CommentRepository commentRepository, ProfileRepository profileRepository) { this.postRepository = postRepository; + this.commentRepository = commentRepository; this.profileRepository = profileRepository; } @@ -34,6 +37,21 @@ public class PostService { return postRepository.findAll(); } + @Transactional + public List findFilteredPosts(String filter) { + List postList = postRepository.findByTextLike("%" + filter + "%"); + List commentList = commentRepository.findByTextLike("%" + filter + "%"); + List allPosts = postRepository.findAll(); + for(Post post : allPosts) { + for (Comment comm : commentList) { + if (post.getComments().contains(comm) && !(postList.contains(post))) { + postList.add(post); + } + } + } + return postList; + } + @Transactional public Post addPost(String text, List comments, Long authorId) { if (!StringUtils.hasText(text)) {