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);