66import org .springframework .data .jpa .repository .Query ;
77import org .springframework .data .repository .query .Param ;
88import ru .practicum .ewm .event .model .Event ;
9+ import ru .practicum .ewm .event .model .EventState ;
910
1011import java .time .LocalDateTime ;
1112import java .util .List ;
@@ -15,21 +16,34 @@ public interface EventRepository extends JpaRepository<Event, Long> {
1516
1617 boolean existsByCategoryId (Long categoryId );
1718
18- @ Query ("SELECT e FROM Event e " +
19+ // @Query("SELECT e FROM Event e " +
20+ // "WHERE (:users IS NULL OR e.initiator.id IN :users) " +
21+ // "AND (:states IS NULL OR e.state IN :states) " +
22+ // "AND (:categories IS NULL OR e.category.id IN :categories) " +
23+ // "AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
24+ // "AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
25+ // "ORDER BY e.id")
26+ // Page<Event> searchEventsAdmin(@Param("users") List<Long> users,
27+ // @Param("states") List<String> states,
28+ // @Param("categories") List<Long> categories,
29+ // @Param("rangeStart") LocalDateTime rangeStart,
30+ // @Param("rangeEnd") LocalDateTime rangeEnd,
31+ // Pageable pageable);
32+
33+ @ Query ("SELECT DISTINCT e FROM Event e " +
34+ "LEFT JOIN FETCH e.category " +
35+ "LEFT JOIN FETCH e.initiator " +
1936 "WHERE (:users IS NULL OR e.initiator.id IN :users) " +
2037 "AND (:states IS NULL OR e.state IN :states) " +
2138 "AND (:categories IS NULL OR e.category.id IN :categories) " +
22- "AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
23- "AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
24- "ORDER BY e.id" )
39+ "AND (CAST(:rangeStart AS timestamp) IS NULL OR CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate BETWEEN :rangeStart AND :rangeEnd)" )
2540 Page <Event > searchEventsAdmin (@ Param ("users" ) List <Long > users ,
26- @ Param ("states" ) List <String > states ,
41+ @ Param ("states" ) List <EventState > states ,
2742 @ Param ("categories" ) List <Long > categories ,
2843 @ Param ("rangeStart" ) LocalDateTime rangeStart ,
2944 @ Param ("rangeEnd" ) LocalDateTime rangeEnd ,
3045 Pageable pageable );
3146
32-
3347 @ Query ("SELECT e FROM Event e " +
3448 "WHERE e.state = 'PUBLISHED' " +
3549 "AND (:text IS NULL OR :text = '' OR " +
0 commit comments