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 7b63102..afea9c3 100644 --- a/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java +++ b/src/main/java/org/cmh/backend/NewsManagement/controller/NewsController.java @@ -1,6 +1,7 @@ package org.cmh.backend.NewsManagement.controller; 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.model.News; @@ -8,7 +9,6 @@ import org.cmh.backend.NewsManagement.service.NewsService; import org.cmh.backend.Utils.JwtVerify; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -20,8 +20,13 @@ public class NewsController { private NewsService newsService; @GetMapping - public ResponseEntity> getNewsPage(@RequestParam Integer pageNo, @RequestParam Integer pageSize) { - return new ResponseEntity<>(newsService.getNewsByPage(pageNo, pageSize), HttpStatus.OK); + @JwtVerify + public ResponseEntity getNewsByRange(@RequestParam Integer start, @RequestParam Integer end, @RequestParam String token) { + if (start >= end) { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + long newsCount = newsService.getNewsCount(); + return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsService.getNewsByRange(start, end)), HttpStatus.OK); } @GetMapping("/{id}") diff --git a/src/main/java/org/cmh/backend/NewsManagement/dto/GetNewsListResponse.java b/src/main/java/org/cmh/backend/NewsManagement/dto/GetNewsListResponse.java new file mode 100644 index 0000000..4c1f6c3 --- /dev/null +++ b/src/main/java/org/cmh/backend/NewsManagement/dto/GetNewsListResponse.java @@ -0,0 +1,17 @@ +package org.cmh.backend.NewsManagement.dto; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import org.cmh.backend.NewsManagement.model.News; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +public class GetNewsListResponse { + Long newsCount; + List newsList; +} 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 0396114..cf4eb85 100644 --- a/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java +++ b/src/main/java/org/cmh/backend/NewsManagement/service/NewsService.java @@ -10,22 +10,47 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class NewsService { @Autowired private NewsRepository newsRepository; - public Page getNewsByPage(int pageNo, int pageSize) { - if (pageNo < 1) { - pageNo = 1; + public List getNewsByRange(int start, int end) { + if (start < 0 || end <= start) { + throw new IllegalArgumentException("Invalid start or end range"); } - if (pageSize < 1) { - pageSize = 10; + + int pageSize = end - start; // 计算每页的大小 + int startPageNumber = start / pageSize; // 计算起始页码 + int endPageNumber = (end - 1) / pageSize; // 计算结束页码 + + List result = new ArrayList<>(); + + for (int pageNumber = startPageNumber; pageNumber <= endPageNumber; pageNumber++) { + Pageable pageable = PageRequest.of(pageNumber, pageSize); + Page newsPage = newsRepository.findAllByOrderByIdDesc(pageable); + + if (newsPage.hasContent()) { + result.addAll(newsPage.getContent()); + } else { + break; // 如果没有更多内容,提前退出 + } } - Pageable pageable = PageRequest.of(pageNo - 1, pageSize); - return newsRepository.findAllByOrderByIdDesc(pageable); + + int startIndex = start % pageSize; + int endIndex = startIndex + (end - start); + + if (endIndex > result.size()) { + endIndex = result.size(); + } + + return result.subList(startIndex, endIndex); } + public void createNews(NewsRequest request) { News news = new News(); news.setTitle(request.getTitle()); @@ -61,4 +86,8 @@ public class NewsService { } return newsRepository.findById(id).orElse(null); } + + public long getNewsCount() { + return newsRepository.count(); + } }