Skip to content

Commit

Permalink
🐛 bug: push 알림 오류 해결(#71)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyoungj00n committed Sep 23, 2024
1 parent 65d99af commit 184ed24
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sm.project.repository.member;

import com.sm.project.domain.food.Refrigerator;
import com.sm.project.domain.mapping.MemberRefrigerator;
import com.sm.project.domain.member.Member;
import org.springframework.data.jpa.repository.JpaRepository;
Expand Down Expand Up @@ -35,4 +36,6 @@ public interface MemberRefrigeratorRepository extends JpaRepository<MemberRefrig
@Transactional
@Query("DELETE FROM MemberRefrigerator mr WHERE mr.member.id = :memberId and mr.refrigerator.id = :refrigeratorId")
void deleteByMemberId(Long memberId, Long refrigeratorId);

List<MemberRefrigerator> findByRefrigerator(Refrigerator refrigerator);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.sm.project.repository.member;

import com.sm.project.domain.food.Refrigerator;
import com.sm.project.domain.mapping.MemberRefrigerator;
import com.sm.project.domain.member.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
Expand Down Expand Up @@ -42,11 +42,10 @@ public interface MemberRepository extends JpaRepository<Member, Long> {

/**
* 특정 냉장고를 소유한 회원을 조회하는 메서드입니다.
*
* @param refrigerator 냉장고 객체
* @return 조회된 회원 객체
* @param memberRefrigerator
* @return
*/
Member findByMemberRefrigeratorListContaining(Refrigerator refrigerator);
Member findByMemberRefrigeratorListContaining(MemberRefrigerator memberRefrigerator);


/**
Expand Down
29 changes: 24 additions & 5 deletions src/main/java/com/sm/project/service/member/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.sm.project.coolsms.SmsUtil;
import com.sm.project.domain.enums.StatusType;
import com.sm.project.domain.food.Refrigerator;
import com.sm.project.domain.mapping.MemberRefrigerator;
import com.sm.project.domain.member.FcmRepository;
import com.sm.project.domain.member.FcmToken;
import com.sm.project.domain.member.Member;
Expand Down Expand Up @@ -208,16 +209,34 @@ public void sendPushAlarm() throws IOException {
Map<String, Integer> map = new HashMap<>();
Date currentTime = new Date();

refrigeratorList.stream().forEach(refrigerator -> {
foodRepository.findTop5ByRefrigeratorOrderByExpireDesc(refrigerator).stream().forEach(food -> {
map.put(food.getName(), (int) (currentTime.getTime() - food.getExpire().getTime()));
refrigeratorList.forEach(refrigerator -> {
// foodRepository에서 음식 목록 가져오기
foodRepository.findTop5ByRefrigeratorOrderByExpireDesc(refrigerator).forEach(food -> {
// 식품 이름과 남은 유통기한을 map에 저장
int daysRemaining = (int) ((food.getExpire().getTime() - currentTime.getTime()) / (1000 * 60 * 60 * 24));
map.put(food.getName(), daysRemaining);
});

try {
// 유통기한 정보 메시지 생성
String result = map.entrySet().stream()
.map(entry -> entry.getKey() + "의 유통기한: " + entry.getValue() + "일 남음")
.collect(Collectors.joining("\n"));
Member member = memberRepository.findByMemberRefrigeratorListContaining(refrigerator);
fcmService.sendMessage(member.getFcmTokenList().get(0).getToken(), "유통기한이 곧 지나는 식품들입니다.", result);

// Refrigerator와 연관된 MemberRefrigerator 목록 조회
List<MemberRefrigerator> memberRefrigeratorList = memberRefrigeratorRepository.findByRefrigerator(refrigerator);

for (MemberRefrigerator memberRefrigerator : memberRefrigeratorList) {
// MemberRefrigerator를 이용해 Member 조회
Member member = memberRepository.findByMemberRefrigeratorListContaining(memberRefrigerator);
if (member != null && !member.getFcmTokenList().isEmpty()) {
fcmService.sendMessage(
member.getFcmTokenList().get(0).getToken(),
"유통기한이 곧 지나는 식품들입니다.",
result
);
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down

0 comments on commit 184ed24

Please sign in to comment.