-
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
feat : 공지 읽음 표시 로직 추가 및 response 수정 #151
Conversation
@Entity | ||
@Getter | ||
@NoArgsConstructor | ||
public class NoticeRead { |
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.
정답-!
@@ -67,13 +70,16 @@ public GetNoticeResponse getNotice(@AuthedUser User user, Long noticeId) { | |||
if (!groupMemberRepository.existsByUserAndStudyGroup(user, notice.getStudyGroup())) | |||
throw new StudyGroupValidationException(HttpStatus.FORBIDDEN.value(), "참여하지 않은 스터디 그룹 입니다."); | |||
|
|||
readNotice(user, notice); |
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.
네이밍 때문에 머리 터질 것 같아요.. 저도 찝찝한 이름이지만 더 생각이 안나서 :(
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.
markNoticeAsRead
같은거..?
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.
오 굳 👍
log.info("success to get notice"); | ||
return GetNoticeResponse.builder() | ||
.author(notice.getAuthor().getNickname()) | ||
.noticeId(notice.getId()) | ||
.noticeTitle(notice.getTitle()) | ||
.noticeContent(notice.getContent()) | ||
.createAt(DateFormatUtil.formatDate(notice.getCreatedAt().toLocalDate())) | ||
.isRead(noticeReadRepository.existsByNoticeAndUser(notice, user)) |
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.
이건 무조건 true 아닌가요?
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.
질문있습니다(진짜 모름)
NoticeRead 객체는
Notice 객체당 1:1 로 매핑되어 생성되는것인가요..?
아니면 notice를 읽을 수 있는 user당 하나씩 생성되는것인가요?
정확히는 |
그러면 NoticeRead가 생성되는 시점이 궁금합니다 언제 생성되는지 잘 모르겠어요 ...
|
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ아닐 것 같다고 생각하신 2번 경우가 정답입니다 특정 유저가 공지글을 읽으면 해당 유저의 |
아..! 이해가 좀 되었습니다... NoticeRead의 존재 여부로 읽었는지 아닌지 판단하는군요 ... ? |
@@ -121,4 +129,12 @@ private void validateStudyGroupExists(Notice notice) { | |||
.orElseThrow(() -> new StudyGroupValidationException(HttpStatus.BAD_REQUEST.value(), "존재하지 않는 스터디 그룹입니다")); | |||
} | |||
|
|||
private void markNoticeAsRead(User user, Notice notice) { | |||
if (!noticeReadRepository.existsByNoticeAndUser(notice, user)) { |
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.
참고차 코멘트입니다
사실 이렇게 ifNonExist -> Insert 구조일때 타이밍 이슈가 생길수 있습니다.
서버가 좀 느린 상황에서 유저가 공지를 광클한다던지.. 하면 행이 두 개씩 생길 수 있겠네요
그래서 엄밀해야하는 상황에서는 유저, 노티스 묶어서 Unique index를 걸고, @SQLInsert
로 INSERT IGNORE 쿼리를 설정한다던가.. save 쿼리에 try-catch를 건다거나 해야합니다.
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.
이 코멘트에 대한 질문인데 ..! 서버가 좀 느린 상황에서 광클을 하면 똑같은 요청이 두세번 가게 되고 그에 대해 똑같은 NoticeRead객체가 저장될 수 있으니 까지는 이해했는데
그 아래에 대한 내용 설명해주실 수 있나요 ㅜ.ㅜ
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.
어우 이제봤네요 늦어져서 죄송합니담
만약에 그럼 Notice
생성 됐을 때 모든 멤버들에 대해 일괄적으로 NoticeRead
객체를 생성한다고 가정한다면,
읽음 여부가 boolean
필드로 관리가 될텐데 이럴 때는 광클 했을 때 동일한 이슈 안생기나요??
insert일 때만 타이밍 이슈가 치명적으로 발생하는건가요?
@@ -121,4 +129,12 @@ private void validateStudyGroupExists(Notice notice) { | |||
.orElseThrow(() -> new StudyGroupValidationException(HttpStatus.BAD_REQUEST.value(), "존재하지 않는 스터디 그룹입니다")); | |||
} | |||
|
|||
private void markNoticeAsRead(User user, Notice notice) { | |||
if (!noticeReadRepository.existsByNoticeAndUser(notice, user)) { |
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.
이 코멘트에 대한 질문인데 ..! 서버가 좀 느린 상황에서 광클을 하면 똑같은 요청이 두세번 가게 되고 그에 대해 똑같은 NoticeRead객체가 저장될 수 있으니 까지는 이해했는데
그 아래에 대한 내용 설명해주실 수 있나요 ㅜ.ㅜ
@@ -121,4 +129,12 @@ private void validateStudyGroupExists(Notice notice) { | |||
.orElseThrow(() -> new StudyGroupValidationException(HttpStatus.BAD_REQUEST.value(), "존재하지 않는 스터디 그룹입니다")); | |||
} | |||
|
|||
private void markNoticeAsRead(User user, Notice notice) { | |||
if (!noticeReadRepository.existsByNoticeAndUser(notice, user)) { |
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.
이 코멘트에 대한 은수 답이 달리면 머지할게용
황교수님 코멘트는 일단 참고라 하셨으니 self-merge 하겠습니다- |
📌 Related Issue
close #146
🚀 Description
NoitceRead
엔티티로 공지를 읽었는지 관리합니다.isRead
로 해당 공지를 읽었는지 표시해 전달합니다.📢 Review Point
📚Etc (선택)