LabWork05: доп задание 5 лабы
This commit is contained in:
parent
60c2564229
commit
cbda0f455f
@ -29,33 +29,18 @@ public class Feed {
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public String getPosts(@RequestParam(required = false) String search, HttpServletRequest request, HttpSession session, Model model) {
|
||||
public String getPosts(@RequestParam(required = false) String search,
|
||||
HttpServletRequest request,
|
||||
HttpSession session,
|
||||
@RequestParam(defaultValue = "0") int page,
|
||||
@RequestParam(defaultValue = "5") int size,
|
||||
Model model) {
|
||||
model.addAttribute("request", request);
|
||||
model.addAttribute("session", session);
|
||||
if (search == null) {
|
||||
model.addAttribute("posts", postService.findAllPosts().stream().map(PostDto::new).toList());
|
||||
} else {
|
||||
var posts = new ArrayList<>(postService.searchPosts(search));
|
||||
var comments = commentService.searchComments(search);
|
||||
for (var post: posts) {
|
||||
post.getComments().clear();
|
||||
}
|
||||
for (var comment: comments) {
|
||||
boolean found = false;
|
||||
for (var post: posts) {
|
||||
if (Objects.equals(comment.getPost().getId(), post.getId())) {
|
||||
post.getComments().add(comment);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
var newPost = comment.getPost();
|
||||
newPost.getComments().clear();
|
||||
newPost.getComments().add(comment);
|
||||
posts.add(newPost);
|
||||
}
|
||||
}
|
||||
var posts = postService.searchPosts(page, size, search);
|
||||
model.addAttribute("posts", posts.stream().map(PostDto::new).toList());
|
||||
}
|
||||
model.addAttribute("customers", customerService.findAllCustomers().stream().map(CustomerDto::new).toList());
|
||||
|
@ -1,5 +1,7 @@
|
||||
package ru.ulstu.is.labwork.Lab4.repositories;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Comment;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
@ -11,5 +13,5 @@ import java.util.List;
|
||||
|
||||
public interface CommentRepository extends JpaRepository<Comment, Long> {
|
||||
@Query("SELECT DISTINCT c FROM Comment c WHERE c.content LIKE %:tag%")
|
||||
List<Comment> searchComments(@Param("tag") String tag);
|
||||
Page<Comment> searchComments(@Param("tag") String tag, Pageable pageable);
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package ru.ulstu.is.labwork.Lab4.repositories;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Post;
|
||||
@ -7,9 +9,11 @@ import org.springframework.data.repository.query.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PostRepository extends JpaRepository<Post, Long> {
|
||||
//@Query("SELECT DISTINCT p FROM Post p WHERE p.title LIKE %:tag% OR p.content LIKE %:tag%")
|
||||
//List<Post> searchPosts(@Param("tag") String tag);
|
||||
@Query("SELECT DISTINCT p FROM Post p WHERE p.title LIKE %:tag% OR p.content LIKE %:tag%")
|
||||
List<Post> searchPosts(@Param("tag") String tag);
|
||||
Page<Post> searchPosts(@Param("tag") String tag, Pageable pageable);
|
||||
|
||||
//Page<Post> findDistinctByContentOrTitleLikeIgnoreCase
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ru.ulstu.is.labwork.Lab4.services;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Comment;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Customer;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Post;
|
||||
@ -20,10 +21,10 @@ public class CommentService {
|
||||
this.commentRepository = commentRepository;
|
||||
}
|
||||
|
||||
@jakarta.transaction.Transactional
|
||||
public List<Comment> searchComments(String tag) {
|
||||
return commentRepository.searchComments(tag);
|
||||
}
|
||||
//@jakarta.transaction.Transactional
|
||||
//public List<Comment> searchComments(String tag) {
|
||||
// return commentRepository.searchComments(tag, PageRequest.of(0,10)).stream().toList();
|
||||
//}
|
||||
|
||||
|
||||
@Transactional
|
||||
|
@ -2,6 +2,9 @@ package ru.ulstu.is.labwork.Lab4.services;
|
||||
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import ru.ulstu.is.labwork.Lab4.DTO.PostDto;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Comment;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Customer;
|
||||
import ru.ulstu.is.labwork.Lab4.model.Post;
|
||||
@ -10,19 +13,45 @@ import org.springframework.util.StringUtils;
|
||||
import ru.ulstu.is.labwork.Lab4.repositories.CommentRepository;
|
||||
import ru.ulstu.is.labwork.Lab4.repositories.PostRepository;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class PostService {
|
||||
private final PostRepository postRepository;
|
||||
private final CommentRepository commentRepository;
|
||||
|
||||
public PostService(PostRepository postRepository) {
|
||||
public PostService(PostRepository postRepository, CommentRepository commentRepository) {
|
||||
this.postRepository = postRepository;
|
||||
this.commentRepository = commentRepository;
|
||||
}
|
||||
@Transactional
|
||||
public List<Post> searchPosts(String tag) {
|
||||
return postRepository.searchPosts(tag);
|
||||
public List<Post> searchPosts(int page, int size, String tag) {
|
||||
//var posts = postRepository.searchPosts(tag);
|
||||
var posts = new ArrayList<>(postRepository.searchPosts(tag, PageRequest.of(page, size)).getContent().stream().toList());
|
||||
var comments = new ArrayList<>(commentRepository.searchComments(tag, PageRequest.of(page, size)).getContent().stream().toList());
|
||||
for (var post: posts) {
|
||||
post.getComments().clear();
|
||||
}
|
||||
for (var comment: comments) {
|
||||
boolean found = false;
|
||||
for (var post: posts) {
|
||||
if (Objects.equals(comment.getPost().getId(), post.getId())) {
|
||||
post.getComments().add(comment);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
var newPost = comment.getPost();
|
||||
newPost.getComments().clear();
|
||||
newPost.getComments().add(comment);
|
||||
posts.add(newPost);
|
||||
}
|
||||
}
|
||||
return posts;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
@ -7,13 +7,13 @@
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/chota@latest">
|
||||
<title>LabWork04 - Social Network</title>
|
||||
<title>LabWork05 - Social Network</title>
|
||||
</head>
|
||||
<body class="container">
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
|
||||
<div>
|
||||
<div>
|
||||
<p class='text-center m-3 h3'>LabWork04 - Social Network</p>
|
||||
<p class='text-center m-3 h3'>LabWork05 - Social Network</p>
|
||||
</div>
|
||||
<div class="nav row">
|
||||
<div class="nav-left col-4" th:with="activeLink=${request.requestURI}">
|
||||
|
Loading…
Reference in New Issue
Block a user