From 68d919a3270909d7d0297b5be4e58cb9df47df51 Mon Sep 17 00:00:00 2001 From: pilyang Date: Tue, 12 Mar 2024 19:12:53 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20SSE=EC=9A=A9=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B3=80=ED=99=98=EC=8B=9C=20db=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feed/application/FeedWriteService.java | 6 +- .../feed/application/event/FeedEvent.java | 8 +- .../domain/converter/FeedEventConverter.java | 84 ++++++------------- .../converter/FeedEventConverterTest.java | 2 +- 4 files changed, 37 insertions(+), 63 deletions(-) diff --git a/backend/src/main/java/team/teamby/teambyteam/feed/application/FeedWriteService.java b/backend/src/main/java/team/teamby/teambyteam/feed/application/FeedWriteService.java index 8ed9c0d1..e21e918a 100644 --- a/backend/src/main/java/team/teamby/teambyteam/feed/application/FeedWriteService.java +++ b/backend/src/main/java/team/teamby/teambyteam/feed/application/FeedWriteService.java @@ -81,7 +81,7 @@ public Long write( imageResponses, memberEmailDto.email() ); - sendFeedWritingEvent(responseForMe); + sendFeedWritingEvent(responseForMe, teamPlaceId); return threadId; } @@ -126,7 +126,7 @@ private List saveImages(final List images, fin .toList(); } - private void sendFeedWritingEvent(final FeedResponse response) { - applicationEventPublisher.publishEvent(new FeedEvent(response)); + private void sendFeedWritingEvent(final FeedResponse response, final Long teamPlaceId) { + applicationEventPublisher.publishEvent(new FeedEvent(response, teamPlaceId)); } } diff --git a/backend/src/main/java/team/teamby/teambyteam/feed/application/event/FeedEvent.java b/backend/src/main/java/team/teamby/teambyteam/feed/application/event/FeedEvent.java index 07431ded..034fc86a 100644 --- a/backend/src/main/java/team/teamby/teambyteam/feed/application/event/FeedEvent.java +++ b/backend/src/main/java/team/teamby/teambyteam/feed/application/event/FeedEvent.java @@ -5,11 +5,13 @@ public class FeedEvent implements DomainEvent { private final Long feedId; + private final Long teamPlaceId; private final FeedResponse response; - public FeedEvent(final FeedResponse response) { + public FeedEvent(final FeedResponse response, final Long teamPlaceId) { this.feedId = response.id(); this.response = response; + this.teamPlaceId = teamPlaceId; } @Override @@ -20,4 +22,8 @@ public Long getDomainId() { public FeedResponse response() { return response; } + + public Long getTeamPlaceId() { + return teamPlaceId; + } } diff --git a/backend/src/main/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverter.java b/backend/src/main/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverter.java index 39cd4f15..1315b2c7 100644 --- a/backend/src/main/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverter.java +++ b/backend/src/main/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverter.java @@ -5,42 +5,23 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import team.teamby.teambyteam.common.domain.DomainEvent; -import team.teamby.teambyteam.feed.application.dto.FeedImageResponse; import team.teamby.teambyteam.feed.application.dto.FeedResponse; import team.teamby.teambyteam.feed.application.event.FeedEvent; -import team.teamby.teambyteam.feed.domain.Feed; -import team.teamby.teambyteam.feed.domain.FeedRepository; -import team.teamby.teambyteam.feed.domain.FeedThread; -import team.teamby.teambyteam.feed.domain.image.FeedThreadImage; -import team.teamby.teambyteam.member.domain.MemberTeamPlace; -import team.teamby.teambyteam.member.domain.MemberTeamPlaceRepository; import team.teamby.teambyteam.sse.domain.TeamPlaceSseEvent; import team.teamby.teambyteam.sse.domain.emitter.TeamPlaceEmitterId; -import java.util.List; - @Slf4j @Component @RequiredArgsConstructor public class FeedEventConverter implements TeamPlaceSseConverter { - private final FeedRepository feedRepository; - private final MemberTeamPlaceRepository memberTeamPlaceRepository; - @Override @Transactional(readOnly = true) public TeamPlaceSseEvent convert(final DomainEvent event) { - final Long feedId = event.getDomainId(); - final Feed feed = feedRepository.findById(feedId) - .orElseThrow(() -> { - final String message = "No FeedFound ID : " + feedId; - log.error(message); - return new RuntimeException(message); - }); - final MemberTeamPlace author = memberTeamPlaceRepository - .findByTeamPlaceIdAndMemberId(feed.getTeamPlaceId(), feed.getAuthorId()) - .orElse(MemberTeamPlace.UNKNOWN_MEMBER_TEAM_PLACE); - return new FeedSse(feed, author); + final FeedEvent feedEvent = (FeedEvent) event; + final Long teamplaceId = feedEvent.getTeamPlaceId(); + + return new FeedSse(feedEvent.response(), teamplaceId); } @Override @@ -53,32 +34,32 @@ private static class FeedSse implements TeamPlaceSseEvent { private static final String EVENT_NAME = "new_thread"; private final Long teamPlaceId; - private final FeedResponse forMe; + private FeedResponse forMe; private FeedResponse forOthers; - public FeedSse(final Feed feed, final MemberTeamPlace author) { - this.teamPlaceId = feed.getTeamPlaceId(); - this.forMe = new FeedResponse( - feed.getId(), - feed.getType().name().toLowerCase(), - feed.getAuthorId(), - author.getDisplayMemberNameValue(), - author.findMemberProfileImageUrl(), - feed.getCreatedAt(), - feed.getContent().getValue(), - convertImageResponses(((FeedThread) feed).getImages()), - true - ); + public FeedSse(final FeedResponse response, final Long teamPlaceId) { + this.teamPlaceId = teamPlaceId; + if (response.isMe()) { + forMe = response; + forOthers = reverseForMeField(response); + return; + } + forMe = reverseForMeField(response); + forOthers = response; } - private static List convertImageResponses(final List images) { - return images.stream().map(feedThreadImage -> - new FeedImageResponse( - feedThreadImage.getId(), - feedThreadImage.isExpired(), - feedThreadImage.getImageName().getValue(), - feedThreadImage.getImageUrl().getValue())) - .toList(); + private static FeedResponse reverseForMeField(final FeedResponse response) { + return new FeedResponse( + response.id(), + response.type(), + response.authorId(), + response.authorName(), + response.profileImageUrl(), + response.createdAt(), + response.content(), + response.images(), + !response.isMe() + ); } @Override @@ -96,19 +77,6 @@ public Object getEvent(final TeamPlaceEmitterId emitterId) { if (emitterId.isMemberId(forMe.authorId())) { return forMe; } - if (forOthers == null) { - return new FeedResponse( - forMe.id(), - forMe.type(), - forMe.authorId(), - forMe.authorName(), - forMe.profileImageUrl(), - forMe.createdAt(), - forMe.content(), - forMe.images(), - false - ); - } return forOthers; } } diff --git a/backend/src/test/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverterTest.java b/backend/src/test/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverterTest.java index d86cf815..3c0fbbce 100644 --- a/backend/src/test/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverterTest.java +++ b/backend/src/test/java/team/teamby/teambyteam/sse/domain/converter/FeedEventConverterTest.java @@ -61,7 +61,7 @@ void convert() { savedMember.getEmailValue() ); - final FeedEvent testEvent = new FeedEvent(response); + final FeedEvent testEvent = new FeedEvent(response, savedTeamPlace.getId()); // when final TeamPlaceSseEvent sseEvent = feedEventConverter.convert(testEvent);