diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index cfdc8f6..525ae49 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -55,16 +55,14 @@ public class localbordService { private final PasswordEncoder passwordEncoder; public List selectNotices(MapDto map) { - String keyword = map.getString("searchKeyword"); map.put("searchKeyword", null); List posts = boardMapper.selectNotices(map); enrichPostsWithAdditionalData(posts); - return filterPostsByKeyword(posts, keyword); + return posts; // 검색 없이 전체 공지사항 리스트 반환 } - public PageInfo selectGeneralPosts(MapDto map) { int page = map.getString("page") != null ? Integer.parseInt(map.getString("page")) : 1; int size = map.getString("size") != null ? Integer.parseInt(map.getString("size")) : 10; @@ -75,26 +73,32 @@ public class localbordService { } String keyword = map.getString("searchKeyword"); - map.put("searchKeyword", null); // MyBatis에 전달하지 않음 + boolean hasKeyword = keyword != null && !keyword.trim().isEmpty(); - // 넉넉히 많이 가져온 후 Java에서 필터링 - PageHelper.startPage(1, 1000); // 최대 1000개까지만 조회 + if (hasKeyword) { + // 전체 데이터를 가져와서 필터링 + map.put("searchKeyword", null); + List allPosts = boardMapper.selectGeneralPosts(map); + enrichPostsWithAdditionalData(allPosts); + + // 검색어 기반 필터링 + List filtered = filterPostsByKeyword(allPosts, keyword.trim()); + + // Java에서 수동 페이징 + int fromIndex = (page - 1) * size; + int toIndex = Math.min(fromIndex + size, filtered.size()); + List pagedList = fromIndex >= filtered.size() ? new ArrayList<>() : filtered.subList(fromIndex, toIndex); + + PageInfo pageInfo = new PageInfo<>(pagedList); + pageInfo.setTotal(filtered.size()); + return PageUtil.redefineNavigation(pageInfo); + } + + // 키워드 없으면 MyBatis에서 DB 페이징 처리 + PageHelper.startPage(page, size); List result = boardMapper.selectGeneralPosts(map); - enrichPostsWithAdditionalData(result); - - // 키워드 필터링 적용 - List filtered = filterPostsByKeyword(result, keyword); - - // 원하는 페이지만 잘라서 리턴 - int fromIndex = (page - 1) * size; - int toIndex = Math.min(fromIndex + size, filtered.size()); - List pageList = fromIndex >= filtered.size() ? new ArrayList<>() : filtered.subList(fromIndex, toIndex); - - PageInfo pageInfo = new PageInfo<>(pageList); - pageInfo.setTotal(filtered.size()); - - return PageUtil.redefineNavigation(pageInfo); + return PageUtil.redefineNavigation(new PageInfo<>(result)); } public void updateIncrementViewCount(Long boardId) {