From ceb4e5ac3ada85c413537a447e21a2d5a7d463a6 Mon Sep 17 00:00:00 2001 From: Sylvain Jermini Date: Mon, 14 Aug 2017 11:13:56 +0200 Subject: [PATCH] #325 convert eventRepository.findByOrganizationId in eventRepository.findByOrganizationIds -> remove n+1 call --- .../java/alfio/manager/EventStatisticsManager.java | 12 ++++-------- src/main/java/alfio/repository/EventRepository.java | 5 +++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/alfio/manager/EventStatisticsManager.java b/src/main/java/alfio/manager/EventStatisticsManager.java index 372ffcb1b0..9f6d3ed2a7 100644 --- a/src/main/java/alfio/manager/EventStatisticsManager.java +++ b/src/main/java/alfio/manager/EventStatisticsManager.java @@ -19,6 +19,7 @@ import alfio.manager.user.UserManager; import alfio.model.*; import alfio.model.modification.TicketWithStatistic; +import alfio.model.user.Organization; import alfio.repository.*; import alfio.util.EventUtil; import alfio.util.MonetaryUtil; @@ -28,10 +29,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -73,10 +71,8 @@ public EventStatisticsManager(EventRepository eventRepository, } private List getAllEvents(String username) { - return userManager.findUserOrganizations(username) - .parallelStream() - .flatMap(o -> eventRepository.findByOrganizationId(o.getId()).stream()) - .collect(Collectors.toList()); + List orgIds = userManager.findUserOrganizations(username).stream().map(Organization::getId).collect(toList()); + return orgIds.isEmpty() ? Collections.emptyList() : eventRepository.findByOrganizationIds(orgIds); } diff --git a/src/main/java/alfio/repository/EventRepository.java b/src/main/java/alfio/repository/EventRepository.java index d955f214df..873d27ac63 100644 --- a/src/main/java/alfio/repository/EventRepository.java +++ b/src/main/java/alfio/repository/EventRepository.java @@ -24,6 +24,7 @@ import java.math.BigDecimal; import java.time.ZonedDateTime; +import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; @@ -46,8 +47,8 @@ public interface EventRepository { @Query("select * from event order by start_ts asc") List findAll(); - @Query("select * from event where org_id = :organizationId") - List findByOrganizationId(@Bind("organizationId") int organizationId); + @Query("select * from event where org_id = in (:organizationIds)") + List findByOrganizationIds(@Bind("organizationIds") Collection organizationIds); @Query("insert into event(short_name, type, display_name, website_url, external_url, website_t_c_url, image_url, file_blob_id, location, latitude, longitude, start_ts, end_ts, time_zone, regular_price_cts, currency, available_seats, vat_included, vat, allowed_payment_proxies, private_key, org_id, locales, vat_status, src_price_cts, version, status) " + "values(:shortName, :type, :displayName, :websiteUrl, :externalUrl, :termsUrl, :imageUrl, :fileBlobId, :location, :latitude, :longitude, :start_ts, :end_ts, :time_zone, 0, :currency, :available_seats, :vat_included, :vat, :paymentProxies, :privateKey, :organizationId, :locales, :vatStatus, :srcPriceCts, :version, :status)")