Skip to content

Commit

Permalink
add custom pagination in events
Browse files Browse the repository at this point in the history
  • Loading branch information
Battlestad committed Oct 15, 2024
1 parent a7d37b9 commit 9ebae84
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions src/main/java/no/fintlabs/EventService.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public Page<EventDto> getMergedLatestEventsWhereSourceApplicationIdIn(
List<Long> sourceApplicationIds,
Pageable pageable
) {
// Fetch the paginated results for the first query
Page<Event> latestEventsPage = eventRepository
.findLatestEventPerSourceApplicationInstanceIdAndSourceApplicationIdIn(
sourceApplicationIds,
Expand All @@ -64,23 +65,32 @@ public Page<EventDto> getMergedLatestEventsWhereSourceApplicationIdIn(
List<Event> latestNonDeletedEvents = eventRepository
.findLatestEventNotDeletedPerSourceApplicationInstanceIdAndSourceApplicationIdIn(
sourceApplicationIds,
Pageable.unpaged() // Fetch all results, no pagination
Pageable.unpaged()
).getContent();

long totalLatestEvents = eventRepository.countLatestEventPerSourceApplicationInstanceIdAndSourceApplicationIdIn(sourceApplicationIds);
long totalLatestNonDeletedEvents = eventRepository.countLatestEventNotDeletedPerSourceApplicationInstanceIdAndSourceApplicationIdIn(sourceApplicationIds);

long totalElements = totalLatestEvents + totalLatestNonDeletedEvents;

log.info("Total Elements: {}", totalElements);
if (totalElements == 0) {
return new PageImpl<>(new ArrayList<>(), pageable, totalElements);
}

List<EventDto> mergedEvents = mergeEvents(latestEventsPage.getContent(), latestNonDeletedEvents);

totalElements = Math.min(totalElements, mergedEvents.size());
int start = (int) pageable.getOffset();
int end = Math.min(start + pageable.getPageSize(), mergedEvents.size());

return new PageImpl<>(mergedEvents, pageable, totalElements);
if (start > mergedEvents.size()) {
return new PageImpl<>(new ArrayList<>(), pageable, totalElements);
}

List<EventDto> paginatedList = mergedEvents.subList(start, end);
return new PageImpl<>(paginatedList, pageable, totalElements);
}


private List<EventDto> mergeEvents(List<Event> latestEvents, List<Event> latestNonDeletedEvents) {
Map<String, Event> nonDeletedEventMap = latestNonDeletedEvents.stream()
.collect(Collectors.toMap(
Expand Down

0 comments on commit 9ebae84

Please sign in to comment.