能搜了,就是有点问题,范围太广,啥都搜到了

This commit is contained in:
高子兴 2024-07-05 06:11:11 +08:00
parent f104c89d08
commit 9e03bb3873
4 changed files with 62 additions and 0 deletions

View File

@ -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<GetNewsListResponse> searchNews(@RequestBody SearchNewsRequest request) {
List<News> newsList = newsService.searchNews(request);
long newsCount = newsList.size();
return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsList), HttpStatus.OK);
}
@GetMapping("/{id}")
@JwtVerify
public ResponseEntity<News> getNewsPage(@PathVariable Long id, @RequestParam String token) {

View File

@ -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;
}

View File

@ -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<News, Long> {
Page<News> findAllByOrderByIdDesc(Pageable pageable);
Page<News> findByTenantOrderByIdDesc(String tenant, Pageable pageable);
List<News> findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContainingAndTenantEquals(
String title,
String summary,
String author,
String imagePath,
String tenant);
List<News> findByTitleContainingOrSummaryContainingOrAuthorContainingOrImagePathContaining(String title, String summary, String author, String imagePath);
}

View File

@ -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<News> 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<News> 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()
);
}
}