Skip to content

Commit 375301b

Browse files
committed
fix21
1 parent 03d4b20 commit 375301b

4 files changed

Lines changed: 54 additions & 114 deletions

File tree

ewm-service/src/main/java/ru/practicum/ewm/event/repository/EventRepository.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,51 @@
11
package ru.practicum.ewm.event.repository;
22

3+
import org.springframework.data.domain.Page;
34
import org.springframework.data.domain.Pageable;
45
import org.springframework.data.jpa.repository.JpaRepository;
56
import org.springframework.data.jpa.repository.Query;
67
import org.springframework.data.repository.query.Param;
78
import ru.practicum.ewm.event.model.Event;
89

10+
import java.time.LocalDateTime;
911
import java.util.List;
1012
import java.util.Map;
1113

12-
public interface EventRepository extends JpaRepository<Event, Long>, EventRepositoryCustom {
14+
public interface EventRepository extends JpaRepository<Event, Long> {
1315

1416
boolean existsByCategoryId(Long categoryId);
1517

18+
@Query("SELECT e FROM Event e " +
19+
"WHERE (:users IS NULL OR e.initiator.id IN :users) " +
20+
"AND (:states IS NULL OR e.state IN :states) " +
21+
"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")
25+
Page<Event> searchEventsAdmin(@Param("users") List<Long> users,
26+
@Param("states") List<String> states,
27+
@Param("categories") List<Long> categories,
28+
@Param("rangeStart") LocalDateTime rangeStart,
29+
@Param("rangeEnd") LocalDateTime rangeEnd,
30+
Pageable pageable);
31+
32+
@Query("SELECT e FROM Event e " +
33+
"WHERE e.state = 'PUBLISHED' " +
34+
"AND (:text IS NULL OR :text = '' OR " +
35+
" LOWER(e.annotation) LIKE LOWER(CONCAT('%', :text, '%')) OR " +
36+
" LOWER(e.description) LIKE LOWER(CONCAT('%', :text, '%'))) " +
37+
"AND (:categories IS NULL OR e.category.id IN :categories) " +
38+
"AND (:paid IS NULL OR e.paid = :paid) " +
39+
"AND (CAST(:rangeStart AS timestamp) IS NULL OR e.eventDate >= :rangeStart) " +
40+
"AND (CAST(:rangeEnd AS timestamp) IS NULL OR e.eventDate <= :rangeEnd) " +
41+
"ORDER BY e.eventDate")
42+
Page<Event> searchEventsPublic(@Param("text") String text,
43+
@Param("categories") List<Long> categories,
44+
@Param("paid") Boolean paid,
45+
@Param("rangeStart") LocalDateTime rangeStart,
46+
@Param("rangeEnd") LocalDateTime rangeEnd,
47+
Pageable pageable);
48+
1649
@Query("SELECT COUNT(r) FROM Request r WHERE r.event.id = :eventId AND r.status = 'CONFIRMED'")
1750
Long countConfirmedRequests(@Param("eventId") Long eventId);
1851

ewm-service/src/main/java/ru/practicum/ewm/event/repository/EventRepositoryCustom.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

ewm-service/src/main/java/ru/practicum/ewm/event/repository/EventRepositoryImpl.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

ewm-service/src/main/java/ru/practicum/ewm/event/service/EventServiceImpl.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import jakarta.servlet.http.HttpServletRequest;
44
import lombok.RequiredArgsConstructor;
55
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.data.domain.Page;
67
import org.springframework.data.domain.PageRequest;
8+
import org.springframework.data.domain.Pageable;
79
import org.springframework.data.domain.Sort;
810
import org.springframework.stereotype.Service;
911
import org.springframework.transaction.annotation.Transactional;
@@ -109,13 +111,16 @@ public List<EventFullDto> getEventsForAdmin(AdminEventSearchParams params) {
109111
throw new IllegalArgumentException("Параметры from и size должны быть > 0");
110112
}
111113

112-
LocalDateTime start = params.getRangeStart();
113-
LocalDateTime end = params.getRangeEnd();
114-
115-
List<Event> events = eventRepository.searchEventsAdmin(
116-
params.getUsers(), params.getStates(), params.getCategories(),
117-
start, end, from, size);
114+
Pageable pageable = PageRequest.of(from / size, size, Sort.by("id"));
115+
Page<Event> page = eventRepository.searchEventsAdmin(
116+
params.getUsers(),
117+
params.getStates(),
118+
params.getCategories(),
119+
params.getRangeStart(),
120+
params.getRangeEnd(),
121+
pageable);
118122

123+
List<Event> events = page.getContent();
119124
List<Long> eventIds = events.stream().map(Event::getId).collect(Collectors.toList());
120125
Map<Long, Long> confirmedRequestsMap = eventRepository.countConfirmedRequestsBatch(eventIds);
121126

@@ -185,19 +190,22 @@ public List<EventShortDto> getEventsForPublic(PublicEventSearchParams params, Ht
185190
throw new IllegalArgumentException("Параметры from и size должны быть > 0");
186191
}
187192

188-
LocalDateTime rangeStart = params.getRangeStart();
189-
LocalDateTime rangeEnd = params.getRangeEnd();
190-
191193
try {
192194
statsClient.sendHit(request);
193195
} catch (Exception e) {
194196
log.warn("Не удалось отправить статистику: {}", e.getMessage());
195197
}
196198

197-
List<Event> events = eventRepository.searchEventsPublic(
198-
params.getText(), params.getCategories(), params.getPaid(),
199-
rangeStart, rangeEnd, from, size);
199+
Pageable pageable = PageRequest.of(from / size, size, Sort.by("eventDate").ascending());
200+
Page<Event> page = eventRepository.searchEventsPublic(
201+
params.getText(),
202+
params.getCategories(),
203+
params.getPaid(),
204+
params.getRangeStart(),
205+
params.getRangeEnd(),
206+
pageable);
200207

208+
List<Event> events = page.getContent();
201209
Map<Long, Long> confirmedRequestsMap = getConfirmedRequestsMap(events);
202210

203211
if (params.getOnlyAvailable()) {

0 commit comments

Comments
 (0)