diff --git a/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java b/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java index fd53a21..c149c4b 100644 --- a/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java +++ b/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java @@ -4,6 +4,7 @@ import jakarta.persistence.EntityNotFoundException; import org.cmh.backend.NewsManagement.dto.GetNewsListResponse; import org.cmh.backend.NewsManagement.dto.MessageResponse; import org.cmh.backend.NewsManagement.dto.NewsRequest; +import org.cmh.backend.NewsManagement.dto.SearchNewsRequest; import org.cmh.backend.NewsManagement.model.News; import org.cmh.backend.NewsManagement.service.NewsService; import org.cmh.backend.Utils.JwtUtil; @@ -16,6 +17,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/news") public class NewsController { @@ -44,6 +47,14 @@ public class NewsController { return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsService.getNewsByRange(start, end, user)), HttpStatus.OK); } + @PostMapping("/search") + @JwtVerify + public ResponseEntity searchNews(@RequestBody SearchNewsRequest request) { + List newsList = newsService.searchNews(request); + long newsCount = newsList.size(); + return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsList), HttpStatus.OK); + } + @GetMapping("/{id}") @JwtVerify public ResponseEntity getNewsPage(@PathVariable Long id, @RequestParam String token) { diff --git a/src/main/java/org/cmh/backend/NewsManagement/dto/SearchNewsRequest.java b/src/main/java/org/cmh/backend/NewsManagement/dto/SearchNewsRequest.java new file mode 100644 index 0000000..7d632fd --- /dev/null +++ b/src/main/java/org/cmh/backend/NewsManagement/dto/SearchNewsRequest.java @@ -0,0 +1,15 @@ +package org.cmh.backend.NewsManagement.dto; + +import lombok.Getter; +import lombok.Setter; +import org.cmh.backend.Utils.JwtRequest; + +@Getter +@Setter +public class SearchNewsRequest extends JwtRequest { + private String author; + private String title; + private String imagePath; + private String summary; + private String sortBy; +} diff --git a/src/main/java/org/cmh/backend/NewsManagement/repository/NewsRepository.java b/src/main/java/org/cmh/backend/NewsManagement/repository/NewsRepository.java index eeb9a87..d5e7884 100644 --- a/src/main/java/org/cmh/backend/NewsManagement/repository/NewsRepository.java +++ b/src/main/java/org/cmh/backend/NewsManagement/repository/NewsRepository.java @@ -5,9 +5,19 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface NewsRepository extends JpaRepository { Page findAllByOrderByIdDesc(Pageable pageable); + Page findByTenantOrderByIdDesc(String tenant, Pageable pageable); + List findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContainingAndTenantEquals( + String title, + String summary, + String author, + String imagePath, + String tenant); + List findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContaining(String title, String summary, String author, String imagePath); } \ No newline at end of file diff --git a/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java b/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java index 48d19b9..701cb09 100644 --- a/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java +++ b/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java @@ -2,9 +2,12 @@ package org.cmh.backend.NewsManagement.service; import jakarta.persistence.EntityNotFoundException; import org.cmh.backend.NewsManagement.dto.NewsRequest; +import org.cmh.backend.NewsManagement.dto.SearchNewsRequest; import org.cmh.backend.NewsManagement.model.News; import org.cmh.backend.NewsManagement.repository.NewsRepository; +import org.cmh.backend.Utils.JwtUtil; import org.cmh.backend.authentication.model.UserHS; +import org.cmh.backend.authentication.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -19,6 +22,9 @@ public class NewsService { @Autowired private NewsRepository newsRepository; + @Autowired + private UserService userService; + public List getNewsByRange(int start, int end, UserHS user) { if (start < 0 || end <= start) { throw new IllegalArgumentException("Invalid start or end range"); @@ -98,4 +104,24 @@ public class NewsService { public long getNewsCount() { return newsRepository.count(); } + // TODO:完善用户权限 + public List searchNews(SearchNewsRequest request) { + String username = JwtUtil.extractUsername(request.getToken()); + UserHS user = userService.getUserByUsername(username); + if (user.getSuperAdmin()) { + return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContaining( + request.getTitle(), + request.getSummary(), + request.getAuthor(), + request.getImagePath() + ); + } + return newsRepository.findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContainingAndTenantEquals( + request.getTitle(), + request.getSummary(), + request.getAuthor(), + request.getImagePath(), + user.getUsername() + ); + } }