Skip to content

Commit ebf3282

Browse files
committed
fix14
1 parent 1795313 commit ebf3282

20 files changed

Lines changed: 336 additions & 358 deletions

ewm-service/src/main/java/ru/practicum/ewm/category/controller/PublicCategoryController.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package ru.practicum.ewm.category.controller;
22

3+
import jakarta.validation.constraints.Positive;
4+
import jakarta.validation.constraints.PositiveOrZero;
35
import lombok.RequiredArgsConstructor;
46
import org.springframework.validation.annotation.Validated;
57
import org.springframework.web.bind.annotation.*;
@@ -16,8 +18,9 @@ public class PublicCategoryController {
1618
private final CategoryService categoryService;
1719

1820
@GetMapping
19-
public List<CategoryDto> getCategories(@RequestParam(defaultValue = "0") int from,
20-
@RequestParam(defaultValue = "10") int size) {
21+
public List<CategoryDto> getCategories(
22+
@RequestParam(defaultValue = "0") @PositiveOrZero int from,
23+
@RequestParam(defaultValue = "10") @Positive int size) {
2124
return categoryService.getCategories(from, size);
2225
}
2326

ewm-service/src/main/java/ru/practicum/ewm/category/service/CategoryServiceImpl.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ public class CategoryServiceImpl implements CategoryService {
2525
@Override
2626
@Transactional
2727
public CategoryDto createCategory(NewCategoryDto dto) {
28-
if (categoryRepository.existsByName(dto.getName())) {
29-
throw new ConflictException("Категория с таким именем уже существует");
30-
}
3128
Category category = CategoryMapper.toCategory(dto);
3229
category = categoryRepository.save(category);
3330
return CategoryMapper.toCategoryDto(category);
@@ -38,9 +35,6 @@ public CategoryDto createCategory(NewCategoryDto dto) {
3835
public CategoryDto updateCategory(Long catId, CategoryDto dto) {
3936
Category category = categoryRepository.findById(catId)
4037
.orElseThrow(() -> new NotFoundException("Категория с id=" + catId + " не найдена"));
41-
if (!category.getName().equals(dto.getName()) && categoryRepository.existsByName(dto.getName())) {
42-
throw new ConflictException("Категория с таким именем уже существует");
43-
}
4438
category.setName(dto.getName());
4539
category = categoryRepository.save(category);
4640
return CategoryMapper.toCategoryDto(category);

ewm-service/src/main/java/ru/practicum/ewm/event/controller/AdminEventController.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,30 @@
22

33
import jakarta.validation.Valid;
44
import lombok.RequiredArgsConstructor;
5-
import org.springframework.format.annotation.DateTimeFormat;
65
import org.springframework.validation.annotation.Validated;
76
import org.springframework.web.bind.annotation.*;
7+
import ru.practicum.ewm.event.dto.AdminEventSearchParams;
88
import ru.practicum.ewm.event.dto.EventFullDto;
99
import ru.practicum.ewm.event.dto.UpdateEventAdminRequest;
10-
import ru.practicum.ewm.event.model.EventState;
11-
import ru.practicum.ewm.event.service.AdminEventService;
10+
import ru.practicum.ewm.event.service.EventService;
1211

13-
import java.time.LocalDateTime;
1412
import java.util.List;
15-
import java.util.stream.Collectors;
1613

1714
@RestController
1815
@RequestMapping("/admin/events")
1916
@RequiredArgsConstructor
2017
@Validated
2118
public class AdminEventController {
22-
private final AdminEventService adminEventService;
19+
private final EventService eventService;
2320

2421
@GetMapping
25-
public List<EventFullDto> getEvents(@RequestParam(required = false) List<Long> users,
26-
@RequestParam(required = false) List<String> states,
27-
@RequestParam(required = false) List<Long> categories,
28-
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeStart,
29-
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeEnd,
30-
@RequestParam(defaultValue = "0") int from,
31-
@RequestParam(defaultValue = "10") int size) {
32-
List<EventState> stateEnums = (states == null) ? null :
33-
states.stream().map(EventState::valueOf).collect(Collectors.toList());
34-
return adminEventService.getEvents(users, stateEnums, categories, rangeStart, rangeEnd, from, size);
22+
public List<EventFullDto> getEvents(@Valid @ModelAttribute AdminEventSearchParams params) {
23+
return eventService.getEventsForAdmin(params);
3524
}
3625

3726
@PatchMapping("/{eventId}")
3827
public EventFullDto updateEvent(@PathVariable Long eventId,
3928
@Valid @RequestBody UpdateEventAdminRequest req) {
40-
return adminEventService.updateEvent(eventId, req);
29+
return eventService.updateEventByAdmin(eventId, req);
4130
}
4231
}

ewm-service/src/main/java/ru/practicum/ewm/event/controller/PrivateEventController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package ru.practicum.ewm.event.controller;
22

33
import jakarta.validation.Valid;
4+
import jakarta.validation.constraints.Positive;
5+
import jakarta.validation.constraints.PositiveOrZero;
46
import lombok.RequiredArgsConstructor;
57
import org.springframework.http.HttpStatus;
68
import org.springframework.validation.annotation.Validated;
@@ -29,8 +31,8 @@ public EventFullDto createEvent(@PathVariable Long userId,
2931

3032
@GetMapping
3133
public List<EventShortDto> getUserEvents(@PathVariable Long userId,
32-
@RequestParam(defaultValue = "0") int from,
33-
@RequestParam(defaultValue = "10") int size) {
34+
@RequestParam(defaultValue = "0") @PositiveOrZero int from,
35+
@RequestParam(defaultValue = "10") @Positive int size) {
3436
return eventService.getUserEvents(userId, from, size);
3537
}
3638

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
package ru.practicum.ewm.event.controller;
22

33
import jakarta.servlet.http.HttpServletRequest;
4-
import jakarta.validation.constraints.Positive;
5-
import jakarta.validation.constraints.PositiveOrZero;
4+
import jakarta.validation.Valid;
65
import lombok.RequiredArgsConstructor;
76
import lombok.extern.slf4j.Slf4j;
8-
import org.springframework.format.annotation.DateTimeFormat;
97
import org.springframework.validation.annotation.Validated;
108
import org.springframework.web.bind.annotation.*;
119
import ru.practicum.ewm.event.dto.EventFullDto;
1210
import ru.practicum.ewm.event.dto.EventShortDto;
13-
import ru.practicum.ewm.event.service.PublicEventService;
14-
import ru.practicum.ewm.event.util.SortType;
11+
import ru.practicum.ewm.event.dto.PublicEventSearchParams;
12+
import ru.practicum.ewm.event.service.EventService;
1513

16-
import java.time.LocalDateTime;
1714
import java.util.List;
1815

1916
@RestController
@@ -22,28 +19,17 @@
2219
@Slf4j
2320
@Validated
2421
public class PublicEventController {
25-
private final PublicEventService publicEventService;
22+
private final EventService eventService;
2623

2724
@GetMapping
28-
public List<EventShortDto> getEvents(
29-
@RequestParam(required = false) String text,
30-
@RequestParam(required = false) List<Long> categories,
31-
@RequestParam(required = false) Boolean paid,
32-
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeStart,
33-
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeEnd,
34-
@RequestParam(defaultValue = "false") Boolean onlyAvailable,
35-
@RequestParam(required = false) SortType sort,
36-
@RequestParam(defaultValue = "0") @PositiveOrZero int from,
37-
@RequestParam(defaultValue = "10") @Positive int size,
38-
HttpServletRequest request) {
39-
log.info("Получение событий с параметрами: text={}, categories={}, paid={}, rangeStart={}, rangeEnd={}, onlyAvailable={}, sort={}, from={}, size={}",
40-
text, categories, paid, rangeStart, rangeEnd, onlyAvailable, sort, from, size);
41-
return publicEventService.getEvents(text, categories, paid, rangeStart, rangeEnd, onlyAvailable, sort, from, size, request);
25+
public List<EventShortDto> getEvents(@Valid @ModelAttribute PublicEventSearchParams params, HttpServletRequest request) {
26+
log.info("Получение событий с параметрами: {}", params);
27+
return eventService.getEventsForPublic(params, request);
4228
}
4329

4430
@GetMapping("/{id}")
4531
public EventFullDto getEvent(@PathVariable Long id, HttpServletRequest request) {
4632
log.info("Получение события с id={}", id);
47-
return publicEventService.getEvent(id, request);
33+
return eventService.getEventForPublic(id, request);
4834
}
4935
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ru.practicum.ewm.event.dto;
2+
3+
import jakarta.validation.constraints.AssertTrue;
4+
import jakarta.validation.constraints.Positive;
5+
import jakarta.validation.constraints.PositiveOrZero;
6+
import lombok.Data;
7+
import org.springframework.format.annotation.DateTimeFormat;
8+
9+
import java.time.LocalDateTime;
10+
import java.util.List;
11+
12+
@Data
13+
public class AdminEventSearchParams {
14+
private List<Long> users;
15+
private List<String> states;
16+
private List<Long> categories;
17+
18+
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
19+
private LocalDateTime rangeStart;
20+
21+
22+
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
23+
private LocalDateTime rangeEnd;
24+
25+
26+
@PositiveOrZero
27+
private int from = 0;
28+
29+
@Positive
30+
private int size = 10;
31+
32+
@AssertTrue(message = "Дата начала не может быть позже даты окончания")
33+
public boolean isRangeStartBeforeRangeEnd() {
34+
if (rangeStart == null || rangeEnd == null) return true;
35+
return !rangeStart.isAfter(rangeEnd);
36+
}
37+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package ru.practicum.ewm.event.dto;
2+
3+
import jakarta.validation.constraints.AssertTrue;
4+
import jakarta.validation.constraints.Positive;
5+
import jakarta.validation.constraints.PositiveOrZero;
6+
import lombok.Data;
7+
import org.springframework.format.annotation.DateTimeFormat;
8+
import ru.practicum.ewm.event.util.SortType;
9+
10+
import java.time.LocalDateTime;
11+
import java.util.List;
12+
13+
@Data
14+
public class PublicEventSearchParams {
15+
private String text;
16+
private List<Long> categories;
17+
private Boolean paid;
18+
19+
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
20+
private LocalDateTime rangeStart;
21+
22+
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
23+
private LocalDateTime rangeEnd;
24+
private Boolean onlyAvailable = false;
25+
private SortType sort;
26+
27+
@PositiveOrZero
28+
private int from = 0;
29+
30+
@Positive
31+
private int size = 10;
32+
33+
@AssertTrue(message = "Дата начала не может быть позже даты окончания")
34+
public boolean isRangeStartBeforeRangeEnd() {
35+
if (rangeStart == null || rangeEnd == null) return true;
36+
return !rangeStart.isAfter(rangeEnd);
37+
}
38+
}

ewm-service/src/main/java/ru/practicum/ewm/event/model/Event.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ public class Event {
5050
@Column(nullable = false, length = 120, columnDefinition = "VARCHAR(120)")
5151
private String title;
5252

53-
private Long views;
54-
5553
@ManyToOne(fetch = FetchType.LAZY)
5654
@JoinColumn(name = "category_id", nullable = false)
5755
private Category category;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public interface EventRepository extends JpaRepository<Event, Long> {
2222
"WHERE (:users IS NULL OR e.initiator.id IN :users) " +
2323
"AND (:states IS NULL OR e.state IN :states) " +
2424
"AND (:categories IS NULL OR e.category.id IN :categories) " +
25-
"AND e.eventDate BETWEEN :rangeStart AND :rangeEnd")
25+
"AND (:rangeStart IS NULL OR e.eventDate >= :rangeStart) " +
26+
"AND (:rangeEnd IS NULL OR e.eventDate <= :rangeEnd)")
2627
Page<Event> findAllByAdminFilters(@Param("users") List<Long> users,
2728
@Param("states") List<EventState> states,
2829
@Param("categories") List<Long> categories,
@@ -38,7 +39,8 @@ Page<Event> findAllByAdminFilters(@Param("users") List<Long> users,
3839
"OR LOWER(e.description::text) LIKE LOWER(CONCAT('%', :text, '%')))) " +
3940
"AND (:categories IS NULL OR e.category_id IN (:categories)) " +
4041
"AND (:paid IS NULL OR e.paid = :paid) " +
41-
"AND e.event_date BETWEEN :rangeStart AND :rangeEnd " +
42+
"AND (:rangeStart IS NULL OR e.event_date >= :rangeStart) " +
43+
"AND (:rangeEnd IS NULL OR e.event_date <= :rangeEnd) " +
4244
"OFFSET :offset ROWS FETCH NEXT :size ROWS ONLY", nativeQuery = true)
4345
List<Event> findPublishedEventsWithFilters(@Param("text") String text,
4446
@Param("categories") List<Long> categories,

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

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

0 commit comments

Comments
 (0)