Skip to content

Commit

Permalink
Refacotr(#127): 팀원이 팀 초대 수락하면 팀장한테 알람가도록 구현 및 팀 초대 api 로직 수정 (#128)
Browse files Browse the repository at this point in the history
* Feat(#74): 알림 엔티티 구현

* Feat(#74): 알림 레포지토리 구현

* Feat(#74): NotificationInfoResDto 구현

* Feat(#74): NotificationListResDto 구현

* Feat(#74): NotificationNotFoundException  구현

* Feat(#74): service 로직 구현

* Feat(#74): controller 로직 구현

* Feat(#74): spring-boot-starter-web-services 의존성 추가

* Feat(#74): 알림-멤버 매핑

* Feat(#74): 챌린지 참여 할 때 알림가도록 추가

* Feat(#74): 챌린지 생성될때마다 알림가도록 변경

* Style(#74): RequiredArgsConstructor 어노테이션 사용하도록 변경

* Feat(#74):notificationService 추가

* Style(#74):notification 객체 생성 빌더 패턴 방식으로 변경

* Refactor(#74):  emitter를 SseEmitterManager 에서 관리하도록 변경

* Style(#74): 불필요한 공백 라인 제거

* Style(#74): 줄바꿈 추가

* Style(#74): 마지막 공백 라인 추가

* Style(#74): SseEmitterManager 추가

* Fix(#74): 챌린지를_개인_대시보드에_추가할_수_있다 테스트 안되는 오류 해결

* Test(#74): NotificationServiceTest 구현

* Feat(#74): 파라미터 name 설정

* Feat(#74): JsonIgnore 어노테이션 삽입

* Feat(#74): isRead 필드 업데이트 메서드 로직 수정

* Test(#74): NotificationController 추가

* Feat(#74): JsonIgnore 어노테이션 삭제

* Fix(#74): Member 필드 삭제

* Test(#74): NotificationController 테스트 구현

* Test(#74): 문서 생성 경로 변경

* Test(#74): 알림 조회 문서 헤더 필드 생성

* Docs(#74): 알림 문서화

* Refactor(#74): 어노테이션 변경

* Refactor(#74): 팀 대시보드 초대 시 알림 메시지 전송 구현

* Refactor(#74): 매직 넘버 상수화

* Test(#74): notificationService 필드 추가

* Feat(#74): 팀원 초대 api 추가

* Refactor(#74): 쿼리스트링으로 입력받도록 변경 및 예외처리 추가

* Test(#74): 팀원 초대 테스트

* Refactor(#74): 팀 대시보드 생성 시 초대 알림 가도록 변경

* Test(#74): 팀 대시보드 생성 시 초대 알림 가도록 변경

* Fix(#74): 충돌 수정

* Refactor(#74): 메서드 분리

* Feat(): 매직 넘버 상수화

* Refactor(#127): 팀원이 팀 초대 수락하면 팀장한테 알람가도록 구현 및 팀 초대 api 로직 수정
  • Loading branch information
dongkyun0713 authored Sep 13, 2024
1 parent 718f7b2 commit 9190410
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
public class TeamDashboardService {

private static final String TEAM_DASHBOARD_JOIN_MESSAGE = "%s님이 %s 대시보드에 초대하였습니다.";
private static final String TEAM_JOIN_ACCEPT_MESSAGE = "%s님이 초대를 수락하였습니다.";


private final TeamDashboardRepository teamDashboardRepository;
Expand Down Expand Up @@ -133,6 +134,9 @@ public void joinTeam(String email, Long dashboardId) {
.orElseThrow(DashboardNotFoundException::new);

dashboard.addMember(member);

String message = String.format(TEAM_JOIN_ACCEPT_MESSAGE, member.getEmail());
notificationService.sendNotification(dashboard.getMember(), message);
}

@Transactional
Expand All @@ -152,17 +156,21 @@ public SearchMemberListResDto searchMembers(String query) {

private void inviteMember(Member member, TeamDashboard teamDashboard, List<String> invitedEmails) {
for (String email : invitedEmails) {
verifyIsSameEmail(member.getEmail(), email);
try {
verifyIsSameEmail(member.getEmail(), email);

Member inviteReceivedMember = memberRepository.findByEmail(email)
.orElseThrow(MemberNotFoundException::new);
Member inviteReceivedMember = memberRepository.findByEmail(email)
.orElseThrow(MemberNotFoundException::new);

String message = String.format(TEAM_DASHBOARD_JOIN_MESSAGE, member.getName(),
teamDashboard.getTitle());
notificationService.sendNotification(inviteReceivedMember, message);
String message = String.format(TEAM_DASHBOARD_JOIN_MESSAGE, member.getName(),
teamDashboard.getTitle());
notificationService.sendNotification(inviteReceivedMember, message);
} catch (MemberNotFoundException ignored) {
}
}
}


private void verifyIsSameEmail(String email, String otherEmail) {
if (email.equals(otherEmail)) {
throw new InvalidMemberInviteException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,29 @@ public class NotificationCustomRepositoryImpl implements NotificationCustomRepos
public Page<Notification> findAllNotifications(Member member, Pageable pageable) {
QNotification notification = QNotification.notification;

long total = Optional.ofNullable(
long total = getTotal(notification, member);
List<Notification> notifications = getNotifications(notification, member, pageable);

return new PageImpl<>(notifications, pageable, total);
}

private long getTotal(QNotification notification, Member member) {
return Optional.ofNullable(
queryFactory
.select(notification.count())
.from(notification)
.where(notification.receiver.eq(member))
.fetchOne()
).orElse(0L);
}

List<Notification> notifications = queryFactory
private List<Notification> getNotifications(QNotification notification, Member member, Pageable pageable) {
return queryFactory
.selectFrom(notification)
.where(notification.receiver.eq(member))
.orderBy(notification.createdAt.desc())
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();

return new PageImpl<>(notifications, pageable, total);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
@Slf4j
@Component
public class SseEmitterManager {
private static final String EMITTER_NAME = "notification";

private final Map<Long, SseEmitter> emitters = new ConcurrentHashMap<>();

Expand All @@ -28,7 +29,9 @@ public void sendNotification(Long memberId, String message) {

if (emitter != null) {
try {
emitter.send(SseEmitter.event().name("notification").data(message));
emitter.send(SseEmitter.event()
.name(EMITTER_NAME)
.data(message));
} catch (Exception e) {
emitter.completeWithError(e);
}
Expand Down

0 comments on commit 9190410

Please sign in to comment.