Skip to content

Commit 6d3c06c

Browse files
authored
refactor: Event 중복 검증 로직 추가
1 parent 265c9b9 commit 6d3c06c

2 files changed

Lines changed: 57 additions & 7 deletions

File tree

backend/src/main/java/com/back/api/event/service/EventService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.time.LocalDateTime;
44
import java.util.List;
5+
import java.util.Optional;
56

67
import org.springframework.data.domain.Page;
78
import org.springframework.data.domain.Pageable;
@@ -111,10 +112,19 @@ private void validateEventDates(LocalDateTime preOpenAt, LocalDateTime preCloseA
111112
}
112113

113114
private void validateDuplicateEvent(String title, String place, LocalDateTime ticketOpenAt) {
115+
if (eventRepository.existsByTitleAndPlaceAndTicketOpenAtAndDeletedFalse(title, place, ticketOpenAt)) {
116+
throw new ErrorException(EventErrorCode.DUPLICATE_EVENT);
117+
}
114118
}
115119

116120
private void validateDuplicateEventForUpdate(Long eventId, String title, String place,
117121
LocalDateTime ticketOpenAt) {
122+
Optional<Event> duplicateEvent = eventRepository.findByTitleAndPlaceAndTicketOpenAtAndDeletedFalse(
123+
title, place, ticketOpenAt);
124+
125+
if (duplicateEvent.isPresent() && !duplicateEvent.get().getId().equals(eventId)) {
126+
throw new ErrorException(EventErrorCode.DUPLICATE_EVENT);
127+
}
118128
}
119129

120130
public List<Event> findEventsByStatus(EventStatus status) {

backend/src/test/java/com/back/api/event/service/EventServiceTest.java

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,50 @@ void createEventFailWhenPreCloseAtAfterTicketOpenAt() {
179179
// @DisplayName("사전등록 시작일이 과거이면 예외 발생")
180180
// void createEventFailWhenPreOpenAtIsBeforeNow() { ... }
181181

182-
// 중복 체크 비활성화로 인해 테스트 제거됨
183-
// @Test
184-
// @DisplayName("중복된 이벤트 생성 시 예외 발생")
185-
// void createEventFailWhenDuplicateEvent() { ... }
182+
@Test
183+
@DisplayName("중복된 이벤트 생성 시 예외 발생")
184+
void createEventFailWhenDuplicateEvent() {
185+
// given
186+
// 첫 번째 이벤트 생성
187+
eventRepository.save(Event.builder()
188+
.title("중복 테스트 이벤트")
189+
.category(EventCategory.CONCERT)
190+
.description("테스트 설명")
191+
.place("중복 장소")
192+
.imageUrl("https://example.com/image.jpg")
193+
.minPrice(10000)
194+
.maxPrice(50000)
195+
.preOpenAt(preOpenAt)
196+
.preCloseAt(preCloseAt)
197+
.ticketOpenAt(ticketOpenAt)
198+
.ticketCloseAt(ticketCloseAt)
199+
.eventDate(eventDate)
200+
.maxTicketAmount(100)
201+
.status(EventStatus.READY)
202+
.build());
203+
204+
// 동일한 title, place, ticketOpenAt으로 이벤트 생성 시도
205+
EventCreateRequest request = new EventCreateRequest(
206+
"중복 테스트 이벤트", // 동일한 title
207+
EventCategory.POPUP,
208+
"다른 설명",
209+
"중복 장소", // 동일한 place
210+
"https://example.com/image2.jpg",
211+
20000,
212+
80000,
213+
preOpenAt,
214+
preCloseAt,
215+
ticketOpenAt, // 동일한 ticketOpenAt
216+
ticketCloseAt,
217+
eventDate,
218+
200
219+
);
220+
221+
// when & then
222+
assertThatThrownBy(() -> eventService.createEvent(request))
223+
.isInstanceOf(ErrorException.class)
224+
.hasFieldOrPropertyWithValue("errorCode", EventErrorCode.DUPLICATE_EVENT);
225+
}
186226
}
187227

188228
@Nested
@@ -327,9 +367,9 @@ void updateEventFailWhenDuplicateWithOtherEvent() {
327367
);
328368

329369
// when & then
330-
// 중복 체크 비활성화로 인해 이제 성공해야 함
331-
EventResponse response = eventService.updateEvent(secondEvent.getId(), request);
332-
assertThat(response.title()).isEqualTo("첫 번째 이벤트");
370+
assertThatThrownBy(() -> eventService.updateEvent(secondEvent.getId(), request))
371+
.isInstanceOf(ErrorException.class)
372+
.hasFieldOrPropertyWithValue("errorCode", EventErrorCode.DUPLICATE_EVENT);
333373
}
334374

335375
@Test

0 commit comments

Comments
 (0)