From ddce9bbf6d71b704a7edf858f78efa6e51c6e877 Mon Sep 17 00:00:00 2001 From: rt3310 Date: Wed, 17 Sep 2025 20:59:43 +0900 Subject: [PATCH] =?UTF-8?q?feature[#332]:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordit/feed/service/FeedLikeService.java | 15 +++++++++++++++ .../sillim/recordit/pushalarm/dto/AlarmType.java | 1 + .../recordit/pushalarm/dto/PushMessage.java | 10 ++++++++++ .../feed/service/FeedLikeServiceTest.java | 4 ++++ 4 files changed, 30 insertions(+) diff --git a/src/main/java/com/sillim/recordit/feed/service/FeedLikeService.java b/src/main/java/com/sillim/recordit/feed/service/FeedLikeService.java index ec9530f7..1eb1276e 100644 --- a/src/main/java/com/sillim/recordit/feed/service/FeedLikeService.java +++ b/src/main/java/com/sillim/recordit/feed/service/FeedLikeService.java @@ -6,6 +6,9 @@ import com.sillim.recordit.feed.repository.FeedRepository; import com.sillim.recordit.global.exception.ErrorCode; import com.sillim.recordit.global.exception.common.RecordNotFoundException; +import com.sillim.recordit.member.service.MemberQueryService; +import com.sillim.recordit.pushalarm.dto.PushMessage; +import com.sillim.recordit.pushalarm.service.AlarmService; import jakarta.persistence.OptimisticLockException; import lombok.RequiredArgsConstructor; import org.hibernate.StaleObjectStateException; @@ -22,6 +25,8 @@ public class FeedLikeService { private final FeedLikeRepository feedLikeRepository; private final FeedRepository feedRepository; + private final AlarmService alarmService; + private final MemberQueryService memberQueryService; @Retryable( retryFor = { @@ -38,6 +43,16 @@ public void feedLike(Long feedId, Long memberId) { .orElseThrow(() -> new RecordNotFoundException(ErrorCode.FEED_NOT_FOUND)); feed.like(); feedLikeRepository.save(new FeedLike(feed, memberId)); + + if (!feed.isOwner(memberId)) { + alarmService.pushAlarm( + memberId, + feed.getMemberId(), + PushMessage.fromFeedLike( + feed.getId(), + memberQueryService.findByMemberId(memberId).getPersonalId(), + feed.getTitle())); + } } @Retryable( diff --git a/src/main/java/com/sillim/recordit/pushalarm/dto/AlarmType.java b/src/main/java/com/sillim/recordit/pushalarm/dto/AlarmType.java index d9a7d79e..f09ae544 100644 --- a/src/main/java/com/sillim/recordit/pushalarm/dto/AlarmType.java +++ b/src/main/java/com/sillim/recordit/pushalarm/dto/AlarmType.java @@ -4,4 +4,5 @@ public enum AlarmType { SCHEDULE, INVITE, FOLLOWING, + FEED_LIKE, } diff --git a/src/main/java/com/sillim/recordit/pushalarm/dto/PushMessage.java b/src/main/java/com/sillim/recordit/pushalarm/dto/PushMessage.java index 566436f7..6129db3f 100644 --- a/src/main/java/com/sillim/recordit/pushalarm/dto/PushMessage.java +++ b/src/main/java/com/sillim/recordit/pushalarm/dto/PushMessage.java @@ -36,4 +36,14 @@ public static PushMessage fromAlarmLog(AlarmLog alarmLog) { alarmLog.getTitle(), alarmLog.getBody()); } + + public static PushMessage fromFeedLike( + Long feedLikeId, String likerPersonalId, String feedTitle) { + return new PushMessage( + null, + AlarmType.FEED_LIKE, + feedLikeId, + likerPersonalId + "님이 " + feedTitle + " 피드에 좋아요를 눌렀습니다.", + ""); + } } diff --git a/src/test/java/com/sillim/recordit/feed/service/FeedLikeServiceTest.java b/src/test/java/com/sillim/recordit/feed/service/FeedLikeServiceTest.java index cbef390e..ef155afb 100644 --- a/src/test/java/com/sillim/recordit/feed/service/FeedLikeServiceTest.java +++ b/src/test/java/com/sillim/recordit/feed/service/FeedLikeServiceTest.java @@ -14,6 +14,7 @@ import com.sillim.recordit.member.domain.Member; import com.sillim.recordit.member.fixture.MemberFixture; import com.sillim.recordit.member.service.MemberQueryService; +import com.sillim.recordit.pushalarm.service.AlarmService; import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -28,6 +29,7 @@ class FeedLikeServiceTest { @Mock FeedLikeRepository feedLikeRepository; @Mock FeedRepository feedRepository; @Mock MemberQueryService memberQueryService; + @Mock AlarmService alarmService; @InjectMocks FeedLikeService feedLikeService; @Test @@ -37,7 +39,9 @@ void feedLike() { long memberId = 1L; Member member = MemberFixture.DEFAULT.getMember(); Feed feed = spy(FeedFixture.DEFAULT.getFeed(memberId)); + FeedLike feedLike = mock(FeedLike.class); given(feedRepository.findById(eq(feedId))).willReturn(Optional.of(feed)); + given(feedLikeRepository.save(any())).willReturn(feedLike); feedLikeService.feedLike(feedId, memberId);