Skip to content

Commit

Permalink
Merge pull request #208 from Re-4aliens/develop
Browse files Browse the repository at this point in the history
 2024-10-24 [Release Note]
  • Loading branch information
mjj111 authored Oct 23, 2024
2 parents 0fd6146 + 8c0bd4f commit 4e6f889
Showing 1 changed file with 30 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,11 @@
import com.aliens.backend.global.response.error.CommonError;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.MemberError;
import com.aliens.backend.notification.domain.FcmToken;
import com.aliens.backend.notification.domain.repository.FcmTokenRepository;
import com.google.firebase.messaging.*;
import com.aliens.backend.global.response.log.InfoLogResponse;
import com.aliens.backend.global.response.success.NotificationSuccess;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

Expand All @@ -28,16 +24,12 @@ public class FcmSender {
private final static String MATCHING_SUCCESS_MESSAGE_BODY = "Friendship 매칭이 완료되었습니다. 파트너를 확인해보세요!";
private final MemberRepository memberRepository;
private final FcmTokenRepository fcmTokenRepository;
private final ObjectMapper objectMapper;
private final Logger log = LoggerFactory.getLogger(this.getClass());


public FcmSender(MemberRepository memberRepository,
FcmTokenRepository fcmTokenRepository,
ObjectMapper objectMapper) {
FcmTokenRepository fcmTokenRepository) {
this.memberRepository = memberRepository;
this.fcmTokenRepository = fcmTokenRepository;
this.objectMapper = objectMapper;
}

@Async
Expand All @@ -47,12 +39,14 @@ public void sendBoardNotification(Comment comment, Member writer) {
.setBody(COMMENT_BODY + comment.getContent())
.build();

String token = findFcmTokenByMember(writer);
if(!isAcceptedFCM(writer)) return;
FcmToken fcmToken = findFcmToken(writer);

Message message = Message.builder()
.setToken(token)
.setToken(fcmToken.getToken())
.setNotification(notification)
.build();
// sendSingleFcm(message);
sendSingleFcm(message);
}

@Async
Expand All @@ -63,19 +57,29 @@ public void sendBoardNotification(Comment comment, List<Member> writers) {
.build();

for(Member writer : writers) {
String token = findFcmTokenByMember(writer);
if(!isAcceptedFCM(writer)) continue;
FcmToken fcmToken = findFcmToken(writer);

Message message = Message.builder()
.setToken(token)
.setToken(fcmToken.getToken())
.setNotification(notification)
.build();
// sendSingleFcm(message);
sendSingleFcm(message);
}
}

@Async
public void sendChatMessage(com.aliens.backend.chat.domain.Message message) {
Member receiver = getMember(message.getReceiverId());
if(!isAcceptedFCM(receiver)) return;

var fcmMessage = createFcmMessage(message);
// sendSingleFcm(fcmMessage);
sendSingleFcm(fcmMessage);
}

private boolean isAcceptedFCM(Member receiver) {
FcmToken fcmToken = findFcmToken(receiver);
return fcmToken.isAccepted();
}

private com.google.firebase.messaging.Message createFcmMessage(com.aliens.backend.chat.domain.Message request) {
Expand All @@ -87,31 +91,34 @@ private com.google.firebase.messaging.Message createFcmMessage(com.aliens.backen
.setTitle(sender.getMemberPage().name())
.setBody(request.getContent())
.build())
.setToken(findFcmTokenByMember(receiver))
.setToken(findFcmToken(receiver).getToken())
.build();
}

private Member getMember(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(() -> new RestApiException(MemberError.NULL_MEMBER));
}

private String findFcmTokenByMember(Member member) {
return fcmTokenRepository.findByMember(member).get().getToken();
private FcmToken findFcmToken(Member member) {
return fcmTokenRepository.findByMember(member).get();
}

private void sendSingleFcm(Message message) {
try {
FirebaseMessaging.getInstance().send(message);
InfoLogResponse response = InfoLogResponse.from(NotificationSuccess.SEND_SINGLE_NOTIFICATION_SUCCESS);
log.info(objectMapper.writeValueAsString(response));
} catch (Exception e) {
throw new RestApiException(CommonError.FCM_MESSAGING_ERROR);
}
}

@Async
public void sendMatchedNotification(Set<Member> members) {
List<String> tokens = members.stream().map(this::findFcmTokenByMember).toList();
List<String> tokens = members.stream()
.map(this::findFcmToken)
.filter(FcmToken::isAccepted)
.map(FcmToken::getToken)
.toList();

Notification notification = Notification.builder()
.setTitle(FRIENDSHIP_TITLE)
.setBody(MATCHING_SUCCESS_MESSAGE_BODY)
Expand Down

0 comments on commit 4e6f889

Please sign in to comment.