Диплом (2 часть)#2
Conversation
…ы с запросами текущего пользователя на участие в событиях
| @Override | ||
| public boolean equals(Object o) { | ||
| if (this == o) return true; | ||
| if (!(o instanceof Category)) return false; |
There was a problem hiding this comment.
можно упростить запись equals
if (this == o) return true;
if (!(o instanceof Category category)) return false;
return Objects.equals(id, category.id);
| private Long id; | ||
|
|
||
| @Size(max = 254) |
There was a problem hiding this comment.
Валидационные аннотации для Entity не нужны
| LocalDateTime endDate = end; | ||
|
|
||
| return (root, query, cb) -> { | ||
| if (startDate != null && endDate != null) { |
There was a problem hiding this comment.
Здесь вы немного запутались с условиями и даже idea подсвечивает об этом
startDate не может быть null, вы выше инициализируете переменную, даже если null и в итоге всё сводится
public static Specification<Event> dateBetween(LocalDateTime start, LocalDateTime end) {
LocalDateTime startDate = (start != null) ? start : LocalDateTime.now();
return (root, query, cb) -> {
if (end != null) {
return cb.between(root.get("eventDate"), startDate, end);
} else {
return cb.greaterThanOrEqualTo(root.get("eventDate"), startDate);
}
};
}
| @Column(nullable = false, length = 120) | ||
| private String title; | ||
|
|
||
| private Long views; |
There was a problem hiding this comment.
views не храниться в бд, а получаем из сервиса статистики
| Event event = eventRepository.findByIdAndState(id, EventState.PUBLISHED) | ||
| .orElseThrow(() -> new NotFoundException("Опубликованное событие с id:" + id + " не найдено")); | ||
|
|
||
| statsClient.createHit(new StatsRequestDto( |
There was a problem hiding this comment.
Помимо сохранения, вы должны получить статистику из statsClient.
Рекомендую также создать dto для запроса и получиться вот так
Long views = statsClient.getStats(
ViewsStatsRequest.builder()
.uri("/events/" + id)
.start(event.getPublishedOn())
.end(LocalDateTime.now())
.unique(true)
.build()
)
.stream()
.findAny()
.map(StatsResponseDto::getHits)
.orElse(0L);
| List<Event> events = eventRepository.findAll(spec, pageable).getContent(); | ||
|
|
||
| statsClient.createHit(new StatsRequestDto("ewm", request.getRequestURI(), request.getRemoteAddr(), LocalDateTime.now())); | ||
|
|
There was a problem hiding this comment.
Для заполнения views нужно запросить количество просмотров каждого события у сервиса статистики
Map<String, Long> eventUriAndIdMap = events.stream()
.map(Event::getId)
.collect(Collectors.toMap(id -> "/events/" + id, Function.identity()));
List<ViewStats> stats = statsClient.getStats(
ViewsStatsRequest.builder()
.uris(eventUriAndIdMap.keySet())
.unique(true)
.build()
);
No description provided.