11package ru .practicum .ewm .event .repository ;
22
3+ import org .springframework .data .domain .Page ;
34import org .springframework .data .domain .Pageable ;
45import org .springframework .data .jpa .repository .JpaRepository ;
56import org .springframework .data .jpa .repository .Query ;
67import org .springframework .data .repository .query .Param ;
78import ru .practicum .ewm .event .model .Event ;
9+ import ru .practicum .ewm .event .model .EventState ;
810
911import java .time .LocalDateTime ;
1012import java .util .List ;
@@ -14,126 +16,47 @@ public interface EventRepository extends JpaRepository<Event, Long> {
1416
1517 boolean existsByCategoryId (Long categoryId );
1618
17- @ Query (value = "SELECT DISTINCT e.* FROM events e " +
18- "LEFT JOIN categories c ON c.id = e.category_id " +
19- "LEFT JOIN users u ON u.id = e.initiator_id " +
20- "WHERE (COALESCE(cast(:users AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.initiator_id IN (:users)) " +
21- "AND (COALESCE(cast(:states AS varchar[]), ARRAY[]::varchar[]) = ARRAY[]::varchar[] OR e.state IN (:states)) " +
22- "AND (COALESCE(cast(:categories AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.category_id IN (:categories)) " +
23- "AND e.event_date >= COALESCE(:rangeStart, '1900-01-01'::timestamp) " +
24- "AND e.event_date <= COALESCE(:rangeEnd, '3000-01-01'::timestamp) " +
25- "OFFSET :offset ROWS FETCH NEXT :size ROWS ONLY" , nativeQuery = true )
26- List <Event > searchEventsAdmin (@ Param ("users" ) List <Long > users ,
27- @ Param ("states" ) List <String > states ,
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 (CAST(:rangeStart AS timestamp) IS NULL OR CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate BETWEEN :rangeStart AND :rangeEnd)" )
26+ Page <Event > searchEventsAdmin (@ Param ("users" ) List <Long > users ,
27+ @ Param ("states" ) List <EventState > states ,
2828 @ Param ("categories" ) List <Long > categories ,
2929 @ Param ("rangeStart" ) LocalDateTime rangeStart ,
3030 @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
31- @ Param ("offset" ) int offset ,
32- @ Param ("size" ) int size );
31+ Pageable pageable );
3332
34- @ Query (value = "SELECT DISTINCT e.* FROM events e " +
35- "LEFT JOIN categories c ON c.id = e.category_id " +
36- "LEFT JOIN users u ON u.id = e.initiator_id " +
33+ @ Query ("SELECT e FROM Event e " +
3734 "WHERE e.state = 'PUBLISHED' " +
38- "AND (COALESCE( :text, '') = '' OR " +
39- " LOWER(e.annotation::text ) LIKE LOWER(CONCAT('%', :text, '%')) OR " +
40- " LOWER(e.description::text ) LIKE LOWER(CONCAT('%', :text, '%'))) " +
41- "AND (COALESCE(cast( :categories AS bigint[]), ARRAY[]::bigint[]) = ARRAY[]::bigint[] OR e.category_id IN ( :categories) ) " +
35+ "AND (:text IS NULL OR :text = '' OR " +
36+ " LOWER(e.annotation) LIKE LOWER(CONCAT('%', :text, '%')) OR " +
37+ " LOWER(e.description) LIKE LOWER(CONCAT('%', :text, '%'))) " +
38+ "AND (:categories IS NULL OR e.category.id IN :categories) " +
4239 "AND (:paid IS NULL OR e.paid = :paid) " +
43- "AND e.event_date >= COALESCE( :rangeStart, '1900-01-01'::timestamp ) " +
44- "AND e.event_date <= COALESCE( :rangeEnd, '3000-01-01'::timestamp ) " +
45- "OFFSET :offset ROWS FETCH NEXT :size ROWS ONLY" , nativeQuery = true )
46- List <Event > searchEventsPublic (@ Param ("text" ) String text ,
40+ "AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
41+ "AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
42+ "ORDER BY e.eventDate" )
43+ Page <Event > searchEventsPublic (@ Param ("text" ) String text ,
4744 @ Param ("categories" ) List <Long > categories ,
4845 @ Param ("paid" ) Boolean paid ,
4946 @ Param ("rangeStart" ) LocalDateTime rangeStart ,
5047 @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
51- @ Param ("offset" ) int offset ,
52- @ Param ("size" ) int size );
48+ Pageable pageable );
5349
5450 @ Query ("SELECT COUNT(r) FROM Request r WHERE r.event.id = :eventId AND r.status = 'CONFIRMED'" )
5551 Long countConfirmedRequests (@ Param ("eventId" ) Long eventId );
5652
5753 @ 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" )
5854 Map <Long , Long > countConfirmedRequestsBatch (@ Param ("eventIds" ) List <Long > eventIds );
5955
60- @ Query ("SELECT e FROM Event e LEFT JOIN FETCH e.category LEFT JOIN FETCH e.initiator WHERE e.initiator.id = :initiatorId" )
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 " +
60+ "ORDER BY e.id" )
6161 List <Event > findAllByInitiatorIdWithDetails (@ Param ("initiatorId" ) Long initiatorId , Pageable pageable );
6262}
63-
64- //package ru.practicum.ewm.event.repository;
65- //
66- //import org.springframework.data.domain.Page;
67- //import org.springframework.data.domain.Pageable;
68- //import org.springframework.data.jpa.repository.JpaRepository;
69- //import org.springframework.data.jpa.repository.Query;
70- //import org.springframework.data.repository.query.Param;
71- //import ru.practicum.ewm.event.model.Event;
72- //import ru.practicum.ewm.event.model.EventState;
73- //
74- //import java.time.LocalDateTime;
75- //import java.util.List;
76- //import java.util.Map;
77- //
78- //public interface EventRepository extends JpaRepository<Event, Long> {
79- //
80- // boolean existsByCategoryId(Long categoryId);
81- //
82- ////1 @Query("SELECT e FROM Event e " +
83- //// "WHERE (:users IS NULL OR e.initiator.id IN :users) " +
84- //// "AND (:states IS NULL OR e.state IN :states) " +
85- //// "AND (:categories IS NULL OR e.category.id IN :categories) " +
86- //// "AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
87- //// "AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
88- //// "ORDER BY e.id")
89- //// Page<Event> searchEventsAdmin(@Param("users") List<Long> users,
90- //// @Param("states") List<String> states,
91- //// @Param("categories") List<Long> categories,
92- //// @Param("rangeStart") LocalDateTime rangeStart,
93- //// @Param("rangeEnd") LocalDateTime rangeEnd,
94- //// Pageable pageable);
95- //
96- // @Query("SELECT DISTINCT e FROM Event e " +
97- // "LEFT JOIN FETCH e.category " +
98- // "LEFT JOIN FETCH e.initiator " +
99- // "WHERE (:users IS NULL OR e.initiator.id IN :users) " +
100- // "AND (:states IS NULL OR e.state IN :states) " +
101- // "AND (:categories IS NULL OR e.category.id IN :categories) " +
102- // "AND (CAST(:rangeStart AS timestamp) IS NULL OR CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate BETWEEN :rangeStart AND :rangeEnd)")
103- // Page<Event> searchEventsAdmin(@Param("users") List<Long> users,
104- // @Param("states") List<EventState> states,
105- // @Param("categories") List<Long> categories,
106- // @Param("rangeStart") LocalDateTime rangeStart,
107- // @Param("rangeEnd") LocalDateTime rangeEnd,
108- // Pageable pageable);
109- //
110- // @Query("SELECT e FROM Event e " +
111- // "WHERE e.state = 'PUBLISHED' " +
112- // "AND (:text IS NULL OR :text = '' OR " +
113- // " LOWER(e.annotation) LIKE LOWER(CONCAT('%', :text, '%')) OR " +
114- // " LOWER(e.description) LIKE LOWER(CONCAT('%', :text, '%'))) " +
115- // "AND (:categories IS NULL OR e.category.id IN :categories) " +
116- // "AND (:paid IS NULL OR e.paid = :paid) " +
117- // "AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
118- // "AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
119- // "ORDER BY e.eventDate")
120- // Page<Event> searchEventsPublic(@Param("text") String text,
121- // @Param("categories") List<Long> categories,
122- // @Param("paid") Boolean paid,
123- // @Param("rangeStart") LocalDateTime rangeStart,
124- // @Param("rangeEnd") LocalDateTime rangeEnd,
125- // Pageable pageable);
126- //
127- // @Query("SELECT COUNT(r) FROM Request r WHERE r.event.id = :eventId AND r.status = 'CONFIRMED'")
128- // Long countConfirmedRequests(@Param("eventId") Long eventId);
129- //
130- // @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")
131- // Map<Long, Long> countConfirmedRequestsBatch(@Param("eventIds") List<Long> eventIds);
132- //
133- // @Query("SELECT e FROM Event e " +
134- // "LEFT JOIN FETCH e.category " +
135- // "LEFT JOIN FETCH e.initiator " +
136- // "WHERE e.initiator.id = :initiatorId " +
137- // "ORDER BY e.id")
138- // List<Event> findAllByInitiatorIdWithDetails(@Param("initiatorId") Long initiatorId, Pageable pageable);
139- //}
0 commit comments