From 663959d8c2116065458054683dff9e5664b172a0 Mon Sep 17 00:00:00 2001 From: Egil Ballestad Date: Tue, 15 Oct 2024 13:43:39 +0200 Subject: [PATCH] add custom pagination in events --- src/main/java/no/fintlabs/EventService.java | 67 ++++++++++++--------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/src/main/java/no/fintlabs/EventService.java b/src/main/java/no/fintlabs/EventService.java index 056b578..8896c2b 100644 --- a/src/main/java/no/fintlabs/EventService.java +++ b/src/main/java/no/fintlabs/EventService.java @@ -36,26 +36,50 @@ public Page findAll(Pageable pageable) { } public Page getMergedLatestEvents(Pageable pageable) { - Page latestEventsPage = eventRepository - .findLatestEventPerSourceApplicationInstanceId(pageable); + List mergedEvents = fetchAndMergeEvents(); - Page latestNonDeletedEventsPage = eventRepository - .findLatestEventNotDeletedPerSourceApplicationInstanceId(pageable); - - long totalLatestEvents = eventRepository.countLatestEventPerSourceApplicationInstanceId(); - long totalLatestNonDeletedEvents = eventRepository.countLatestEventNotDeletedPerSourceApplicationInstanceId(); - - List mergedEvents = mergeEvents(latestEventsPage.getContent(), latestNonDeletedEventsPage.getContent()); - - long totalElements = totalLatestEvents + totalLatestNonDeletedEvents; - - return new PageImpl<>(mergedEvents, pageable, totalElements); + return getEventDtos(pageable, mergedEvents); } + public Page getMergedLatestEventsWhereSourceApplicationIdIn( List sourceApplicationIds, Pageable pageable ) { + List mergedEvents = fetchAndMergeEventsWithSourceApplicationIds(sourceApplicationIds); + + return getEventDtos(pageable, mergedEvents); + } + + private PageImpl getEventDtos(Pageable pageable, List mergedEvents) { + sortMergedEvents(mergedEvents, pageable.getSort()); + + long totalElements = mergedEvents.size(); + + int start = (int) pageable.getOffset(); + int end = Math.min(start + pageable.getPageSize(), mergedEvents.size()); + + if (start >= mergedEvents.size()) { + return new PageImpl<>(new ArrayList<>(), pageable, totalElements); + } + + List paginatedList = mergedEvents.subList(start, end); + return new PageImpl<>(paginatedList, pageable, totalElements); + } + + private List fetchAndMergeEvents() { + List latestEvents = eventRepository + .findLatestEventPerSourceApplicationInstanceId(Pageable.unpaged()) + .getContent(); + + List latestNonDeletedEvents = eventRepository + .findLatestEventNotDeletedPerSourceApplicationInstanceId(Pageable.unpaged()) + .getContent(); + + return mergeEvents(latestEvents, latestNonDeletedEvents); + } + + private List fetchAndMergeEventsWithSourceApplicationIds(List sourceApplicationIds) { List latestEvents = eventRepository .findLatestEventPerSourceApplicationInstanceIdAndSourceApplicationIdIn( sourceApplicationIds, @@ -68,9 +92,10 @@ public Page getMergedLatestEventsWhereSourceApplicationIdIn( Pageable.unpaged() ).getContent(); - List mergedEvents = mergeEvents(latestEvents, latestNonDeletedEvents); + return mergeEvents(latestEvents, latestNonDeletedEvents); + } - Sort sort = pageable.getSort(); + private void sortMergedEvents(List mergedEvents, Sort sort) { if (sort.isSorted()) { mergedEvents.sort((e1, e2) -> { for (Sort.Order order : sort) { @@ -82,18 +107,6 @@ public Page getMergedLatestEventsWhereSourceApplicationIdIn( return 0; }); } - - long totalElements = mergedEvents.size(); - - int start = (int) pageable.getOffset(); - int end = Math.min(start + pageable.getPageSize(), mergedEvents.size()); - - if (start >= mergedEvents.size()) { - return new PageImpl<>(new ArrayList<>(), pageable, totalElements); - } - - List paginatedList = mergedEvents.subList(start, end); - return new PageImpl<>(paginatedList, pageable, totalElements); } private int compareEvents(EventDto e1, EventDto e2, Sort.Order order) {