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 996f20e commit 663959d
Showing 1 changed file with 40 additions and 27 deletions.
67 changes: 40 additions & 27 deletions src/main/java/no/fintlabs/EventService.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,26 +36,50 @@ public Page<EventDto> findAll(Pageable pageable) {
}

public Page<EventDto> getMergedLatestEvents(Pageable pageable) {
Page<Event> latestEventsPage = eventRepository
.findLatestEventPerSourceApplicationInstanceId(pageable);
List<EventDto> mergedEvents = fetchAndMergeEvents();

Page<Event> latestNonDeletedEventsPage = eventRepository
.findLatestEventNotDeletedPerSourceApplicationInstanceId(pageable);

long totalLatestEvents = eventRepository.countLatestEventPerSourceApplicationInstanceId();
long totalLatestNonDeletedEvents = eventRepository.countLatestEventNotDeletedPerSourceApplicationInstanceId();

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

long totalElements = totalLatestEvents + totalLatestNonDeletedEvents;

return new PageImpl<>(mergedEvents, pageable, totalElements);
return getEventDtos(pageable, mergedEvents);
}


public Page<EventDto> getMergedLatestEventsWhereSourceApplicationIdIn(
List<Long> sourceApplicationIds,
Pageable pageable
) {
List<EventDto> mergedEvents = fetchAndMergeEventsWithSourceApplicationIds(sourceApplicationIds);

return getEventDtos(pageable, mergedEvents);
}

private PageImpl<EventDto> getEventDtos(Pageable pageable, List<EventDto> 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<EventDto> paginatedList = mergedEvents.subList(start, end);
return new PageImpl<>(paginatedList, pageable, totalElements);
}

private List<EventDto> fetchAndMergeEvents() {
List<Event> latestEvents = eventRepository
.findLatestEventPerSourceApplicationInstanceId(Pageable.unpaged())
.getContent();

List<Event> latestNonDeletedEvents = eventRepository
.findLatestEventNotDeletedPerSourceApplicationInstanceId(Pageable.unpaged())
.getContent();

return mergeEvents(latestEvents, latestNonDeletedEvents);
}

private List<EventDto> fetchAndMergeEventsWithSourceApplicationIds(List<Long> sourceApplicationIds) {
List<Event> latestEvents = eventRepository
.findLatestEventPerSourceApplicationInstanceIdAndSourceApplicationIdIn(
sourceApplicationIds,
Expand All @@ -68,9 +92,10 @@ public Page<EventDto> getMergedLatestEventsWhereSourceApplicationIdIn(
Pageable.unpaged()
).getContent();

List<EventDto> mergedEvents = mergeEvents(latestEvents, latestNonDeletedEvents);
return mergeEvents(latestEvents, latestNonDeletedEvents);
}

Sort sort = pageable.getSort();
private void sortMergedEvents(List<EventDto> mergedEvents, Sort sort) {
if (sort.isSorted()) {
mergedEvents.sort((e1, e2) -> {
for (Sort.Order order : sort) {
Expand All @@ -82,18 +107,6 @@ public Page<EventDto> 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<EventDto> paginatedList = mergedEvents.subList(start, end);
return new PageImpl<>(paginatedList, pageable, totalElements);
}

private int compareEvents(EventDto e1, EventDto e2, Sort.Order order) {
Expand Down

0 comments on commit 663959d

Please sign in to comment.