-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/#115 이벤트 cud 기능 구현 #138
The head ref may contain hidden characters: "Feature/#115-\uC774\uBCA4\uD2B8_CUD_\uAE30\uB2A5_\uAD6C\uD604"
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다~! 코드가 전체적으로 가독성이 좋아서 술술 잘 읽히네요
코멘트 확인 후 반영부탁드립니다~!
미리 approve할게요!
throw new EventException(EventExceptionType.FORBIDDEN_PARTICIPATE_EVENT); | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static 메서드라 순서가 바뀐 것 같습니다! 원래 위치로 돌려주세요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컨벤션이나 기능상 문제가 있는건 아닌데 혹시 되돌려야 하는 이유가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
먼저 해당 메서드가 static으로 선언되어야 할 이유가 없는 것 같고, 제가 public 메서드 다음에 private 메서드를 작성하는 것이 코드 흐름을 따라가기 편하다고 생각해서 그렇게 요청 드렸었습니다!
@@ -23,11 +23,11 @@ public class EventTag { | |||
@ManyToOne(fetch = FetchType.LAZY) | |||
@JoinColumn(name = "event_id", nullable = false) | |||
private Event event; | |||
@ManyToOne(fetch = FetchType.LAZY) | |||
@ManyToOne(fetch = FetchType.EAGER) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 fetch 타입을 EAGER로 바꾸신 이유가 무엇인가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
가장 큰 이유는 EventServiceTest
에서 이벤트에 태그가 정상적으로 생성/업데이트 되었는지 확인하기 위함입니다.
EventDetailResponse
와 EventResponse
를 보았을 때 모두 태그를 반환하고 있어 이벤트와 태그는 항상 같이 조회되므로 사실상 EAGER로 했을 때 불필요한 조회가 일어나지 않을 것으로 예상되어 EAGER로 설정하고 테스트했습니다.
} | ||
|
||
return EventDetailResponse.from(event); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT: 이 메서드에서 사용된 saveNewEvent() 메서드와 findAllPersistTagsOrElseThrow() 메서드는 순서 상 addEvent 바로 다음에 오면 코드를 읽기 더 쉬울 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다 !!
코멘트에 대해 제리 생각 한번 써주시고 재요청 주세요
@@ -39,7 +41,7 @@ public class Event extends BaseEntity { | |||
private LocalDateTime endDate; | |||
@Column(nullable = false) | |||
private String informationUrl; | |||
@OneToMany(mappedBy = "event") | |||
@OneToMany(mappedBy = "event", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
EAGER를 쓰신 이유가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 이 부분은 궁금하네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
final String message = e.getBindingResult().getAllErrors().stream() | ||
.map(DefaultMessageSourceResolvable::getDefaultMessage) | ||
.collect(Collectors.joining("\n")); | ||
log.warn("[WARN] MESSAGE: {}", message); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 에러가 "WARN 레벨이 타당할까?"에 대해 한번 생각해봐주시면 좋을 것 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 개인적으로 warn 단계 적당하다고 생각합니다.
info라고 하기에는 일반적이지 않은 상황이고,
error라고 하기에는 예측한 에러 상황이니까요.
이에 대해서 한번 이야기를 해볼 수 있을 것 같아요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 warn이 적당하다고 생각했으나 info로 해도 괜찮지 않을까 싶기도 하네요.
어디까질 warn, 어디부턴 info를 나누는 기준이 명확하지 않아 다같이 얘기해보면 좋을 것 같습니다.
혹시 의견 있으시면 남겨주세요.
public ResponseEntity<ExceptionResponse> handleDateTimeParseException( | ||
final DateTimeParseException e) { | ||
final String message = "DateTime 입력 형식이 올바르지 않습니다."; | ||
log.warn("[WARN] MESSAGE: " + message); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위와 마찬가지입니다.
|
||
eventTagRepository.deleteAllByEventId(eventId); | ||
|
||
final Event updatedEvent = event.updateEventContent(request.getName(), request.getLocation(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
매번 존재했던 태그들을 삭제하고 저장하는 방식인가요?
모든 태그들을 저장하는게 List 여서, 굳이 for문을 돌지 않고 바로 addAll 하는게 어떤가 해서요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네, 매번 모든 태그를 지우고 새로 등록합니다.
업데이트가 일어날 때 기존 이벤트에 등록된 태그를 확인해서 중복되는 것은 남겨두고 존재하지 않는 것은 지우고 새로운 것은 등록하는 것 보다 모두 지우고 새로 등록하는게 로직상 복잡도를 낮추고 업데이트가 자주 일어나는 일이 아니므로 괜찮을 것이라 생각하여 위와 같이 구현했습니다.
혹시 이에 대한 경험이 있으시면 공유해 주세요.
addAll 방식으로 리팩터링 완료 했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
태그 추가하는 것이, participnat랑 비슷해서 괜찮았네요.
그 tag 변하는 부분 관련해서 확인을 잘 해주시면 좋을 것 같아요.
final String message = e.getBindingResult().getAllErrors().stream() | ||
.map(DefaultMessageSourceResolvable::getDefaultMessage) | ||
.collect(Collectors.joining("\n")); | ||
log.warn("[WARN] MESSAGE: {}", message); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 개인적으로 warn 단계 적당하다고 생각합니다.
info라고 하기에는 일반적이지 않은 상황이고,
error라고 하기에는 예측한 에러 상황이니까요.
이에 대해서 한번 이야기를 해볼 수 있을 것 같아요.
@@ -39,7 +41,7 @@ public class Event extends BaseEntity { | |||
private LocalDateTime endDate; | |||
@Column(nullable = false) | |||
private String informationUrl; | |||
@OneToMany(mappedBy = "event") | |||
@OneToMany(mappedBy = "event", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 이 부분은 궁금하네요.
@@ -53,6 +55,8 @@ public Event( | |||
final LocalDateTime endDate, | |||
final String informationUrl | |||
) { | |||
validateStartBeforeOrEqualEndDateTime(startDate, endDate); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
this.tags = new ArrayList<>(); | ||
|
||
for (final Tag tag : tags) { | ||
addEventTag(tag); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 이 부분 N+1문제 안 나나요?
궁금해서요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추가적으로 이런식으로 작성하면 기존에 있는, EventTag들은 테이블에서 다 지워지나요?
안 지워지고 남아있을수도 있을 것 같다는 생각이 들어서요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
() -> assertEquals(newStartDateTime, updatedEvent.getStartDate()), | ||
() -> assertEquals(newEndDateTime, updatedEvent.getEndDate()), | ||
() -> assertEquals(newInformationUrl, updatedEvent.getInformationUrl()), | ||
() -> assertEquals(newTags.size(), event.getTags().size()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
태그는 사이즈 말고 더 정확한 방식으로 검증하면 어떨까요?
#️⃣연관된 이슈
close #115
📝작업 내용
스크린샷 (선택)
예상 소요 시간 및 실제 소요 시간
6시간 / 8시간