Skip to content
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

Refactor/#649 댓글 행사 알림 스펙 변경 #672

Merged

Conversation

java-saeng
Copy link
Collaborator

#️⃣연관된 이슈

업무

Comment, Event에 관한 알림 메시지가 요구사항에 의해 달라졌고, 이를 이제 하나의 UpdateNotification에서 관리할 수 없게 됐습니다.

그래서 기존 UpdateNoficiation(댓글, 행사 알림)이 Notification으로 변경됐습니다.

이제 Notification에는 json_data라는 칼럼이 존재하는데 이는 알림에 관한 정보를 담고 있는 Json 형식의 데이터라고 생각하면 됩니다.

이렇게 한 이유는 알림이 추후에 추가될 때마다 테이블을 생성하거나 상속을 사용하는 것이 좋지 않은 설계라고 생각했습니다.

알림에 관해 따로 검색이나 특별한 기능이 없기 때문에 저장 용도 + 목록 조회이므로 이렇게 가능하다고 생각이 들어 구현했습니다

예상 소요 시간 및 실제 소요 시간

예상 소요 시간 9/29
실제 소요 시간 9/27

@java-saeng java-saeng added Backend 백엔드 관련 이슈 리팩터링 테스트 코드의 검증 값이 변환하지 않고 코드 변경 labels Sep 27, 2023
@java-saeng java-saeng added this to the 6차 스프린트 milestone Sep 27, 2023
@java-saeng java-saeng self-assigned this Sep 27, 2023
Copy link
Collaborator

@hyeonjerry hyeonjerry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

private static final String UPDATE_NOTIFICATION_COMMENT_TYPE = "COMMENT";

private final Long receiverId;
private final Long redirectId;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 redirectId가 댓글의 id인가요?
만약 맞다면 redirectId로 추상화하여 EventNotificationEvent와 필드를 통일한 것도 좋지만 개인적으로 commentId 혹은 eventId와 같이 명시적으로 작성하는게 오해를 불러일으킬 확률을 낮출 수 있을 것 같아요.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 맞네여 이제 구분지어줄 필요가 없을 것 같습니다

감사합니다

private NotificationType type;

@Column(columnDefinition = "MEDIUMTEXT")
private String jsonData;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

json으로 데이터를 저장함으로써 데이터 형식에 상관없이 저장할 수 있게 되었네요👍

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

json data로 바꾸신건 야무지네요.

이제 QueryService들을 조금씩 수정을 해야겠군요.

Copy link
Collaborator

@hong-sile hong-sile left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우르 json 직렬화 한게 인상적이네요. 재밌게 봤습니다.

꼭 바꿔야한다! 는 부분은 없어서, Approve 누르겠습니다.

의견 남긴 부분에 대해서는 반영할 부분만 반영하시면 될 것 같아요.

@@ -17,6 +17,7 @@ drop table if exists kerdy.message;
drop table if exists kerdy.room;
drop table if exists kerdy.feed;
drop table if exists kerdy.image;
drop table if exists kerdy.notification;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이제 update_notificaition도 지워야겠네요.

private NotificationType type;

@Column(columnDefinition = "MEDIUMTEXT")
private String jsonData;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

json data로 바꾸신건 야무지네요.

이제 QueryService들을 조금씩 수정을 해야겠군요.

@@ -40,6 +49,50 @@ public void createUpdateNotification(final UpdateNotificationEvent updateNotific
}
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
@TransactionalEventListener
public void createCommentNotification(final CommentNotificationEvent commentNotificationEvent) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 둘의 코드가 거의 동일한 것 같아요. 차이라고 한다면,
Notification을 생성할 때, Type과 파라미터 정도겠군요.

이정도로 공통된 부분은 추상화가 가능하지 않을까요?
(이건 의견이라 반영 안하셔도 됩니다.)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NotificationEvent에서, EventType을 들고있어요.

이를 이용해서 한다면 추상화가 될 것 같아요.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다음 이슈에서 코드 삭제하면서 한번 고려해보도록 할게요 !

@Getter
public class CommentNotificationEvent {

private static final String UPDATE_NOTIFICATION_COMMENT_TYPE = "COMMENT";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에 있는 static field를 단순 String이 아니라 NotificationType을 사용해보는 건 어떨까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CommentNotificationEvent가 굳이 Notification을 알아야할까 라는 생각했어요.

enum을 쓴다고 해서 단지 패키지 의존성만 생길 뿐, 큰 장점을 얻지 못한다고 생각했습니다.

Copy link
Collaborator

@amaran-th amaran-th left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!
구조적으로 훨씬 깔끔해진 게 보이네요!
제가 봤을 땐 다른 분들께서 언급하신 부분 외의 크게 논할 점은 없었던 것 같습니다.
approve하겠습니다~!!

@java-saeng java-saeng merged commit 6745e1a into backend-main Sep 28, 2023
3 checks passed
@chws0508 chws0508 deleted the Refactor/#649-댓글_행사_알림_스펙_변경 branch October 11, 2023 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backend 백엔드 관련 이슈 리팩터링 테스트 코드의 검증 값이 변환하지 않고 코드 변경
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants