@@ -16,46 +16,49 @@ public interface EventRepository extends JpaRepository<Event, Long> {
1616
1717 boolean existsByCategoryId (Long categoryId );
1818
19- @ Query ("SELECT DISTINCT e FROM Event e " +
20- "LEFT JOIN FETCH e.category " +
21- "LEFT JOIN FETCH e.initiator " +
22- "WHERE (:users IS NULL OR e.initiator.id IN :users) " +
23- "AND (:states IS NULL OR e.state IN :states) " +
24- "AND (:categories IS NULL OR e.category.id IN :categories) " +
25- "AND (:rangeStart IS NULL OR e.eventDate >= :rangeStart) " +
26- "AND (:rangeEnd IS NULL OR e.eventDate <= :rangeEnd)" )
27- Page <Event > findAllByAdminFilters (@ Param ("users" ) List <Long > users ,
28- @ Param ("states" ) List <EventState > states ,
29- @ Param ("categories" ) List <Long > categories ,
30- @ Param ("rangeStart" ) LocalDateTime rangeStart ,
31- @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
32- Pageable pageable );
33-
34- @ Query ("SELECT DISTINCT e FROM Event e " +
35- "LEFT JOIN FETCH e.category " +
36- "LEFT JOIN FETCH e.initiator " +
19+ @ Query (value = "SELECT DISTINCT e.* FROM events e " +
20+ "LEFT JOIN categories c ON c.id = e.category_id " +
21+ "LEFT JOIN users u ON u.id = e.initiator_id " +
22+ "WHERE (COALESCE(cast(:users AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.initiator_id IN (:users)) " +
23+ "AND (COALESCE(cast(:states AS varchar[]), ARRAY[]::varchar[]) = ARRAY[]::varchar[] OR e.state IN (:states)) " +
24+ "AND (COALESCE(cast(:categories AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.category_id IN (:categories)) " +
25+ "AND e.event_date >= COALESCE(:rangeStart, '1900-01-01'::timestamp) " +
26+ "AND e.event_date <= COALESCE(:rangeEnd, '3000-01-01'::timestamp) " +
27+ "OFFSET :offset ROWS FETCH NEXT :size ROWS ONLY" , nativeQuery = true )
28+ List <Event > findAllByAdminFiltersNative (@ Param ("users" ) List <Long > users ,
29+ @ Param ("states" ) List <String > states ,
30+ @ Param ("categories" ) List <Long > categories ,
31+ @ Param ("rangeStart" ) LocalDateTime rangeStart ,
32+ @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
33+ @ Param ("offset" ) int offset ,
34+ @ Param ("size" ) int size );
35+
36+ @ Query (value = "SELECT DISTINCT e.* FROM events e " +
37+ "LEFT JOIN categories c ON c.id = e.category_id " +
38+ "LEFT JOIN users u ON u.id = e.initiator_id " +
3739 "WHERE e.state = 'PUBLISHED' " +
38- "AND (:text IS NULL OR LOWER(e.annotation) LIKE LOWER(CONCAT('%', :text, '%')) OR LOWER(e.description) LIKE LOWER(CONCAT('%', :text, '%'))) " +
39- "AND (:categories IS NULL OR e.category.id IN :categories) " +
40+ "AND (COALESCE(:text, '') = '' OR " +
41+ " LOWER(e.annotation::text) LIKE LOWER(CONCAT('%', :text, '%')) OR " +
42+ " LOWER(e.description::text) LIKE LOWER(CONCAT('%', :text, '%'))) " +
43+ "AND (COALESCE(cast(:categories AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.category_id IN (:categories)) " +
4044 "AND (:paid IS NULL OR e.paid = :paid) " +
41- "AND (:rangeStart IS NULL OR e.eventDate >= :rangeStart) " +
42- "AND (:rangeEnd IS NULL OR e.eventDate <= :rangeEnd)" )
43- Page <Event > findPublishedEventsWithFilters (@ Param ("text" ) String text ,
44- @ Param ("categories" ) List <Long > categories ,
45- @ Param ("paid" ) Boolean paid ,
46- @ Param ("rangeStart" ) LocalDateTime rangeStart ,
47- @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
48- Pageable pageable );
45+ "AND e.event_date >= COALESCE(:rangeStart, '1900-01-01'::timestamp) " +
46+ "AND e.event_date <= COALESCE(:rangeEnd, '3000-01-01'::timestamp) " +
47+ "OFFSET :offset ROWS FETCH NEXT :size ROWS ONLY" , nativeQuery = true )
48+ List <Event > findPublishedEventsWithFiltersNative (@ Param ("text" ) String text ,
49+ @ Param ("categories" ) List <Long > categories ,
50+ @ Param ("paid" ) Boolean paid ,
51+ @ Param ("rangeStart" ) LocalDateTime rangeStart ,
52+ @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
53+ @ Param ("offset" ) int offset ,
54+ @ Param ("size" ) int size );
4955
5056 @ Query ("SELECT COUNT(r) FROM Request r WHERE r.event.id = :eventId AND r.status = 'CONFIRMED'" )
5157 Long countConfirmedRequests (@ Param ("eventId" ) Long eventId );
5258
5359 @ Query ("SELECT r.event.id, COUNT(r) FROM Request r WHERE r.event.id IN :eventIds AND r.status = 'CONFIRMED' GROUP BY r.event.id" )
5460 Map <Long , Long > countConfirmedRequestsBatch (@ Param ("eventIds" ) List <Long > eventIds );
5561
56- @ Query ("SELECT e FROM Event e " +
57- "LEFT JOIN FETCH e.category " +
58- "LEFT JOIN FETCH e.initiator " +
59- "WHERE e.initiator.id = :initiatorId" )
62+ @ Query ("SELECT e FROM Event e LEFT JOIN FETCH e.category LEFT JOIN FETCH e.initiator WHERE e.initiator.id = :initiatorId" )
6063 Page <Event > findAllByInitiatorIdWithDetails (@ Param ("initiatorId" ) Long initiatorId , Pageable pageable );
6164}
0 commit comments