From 43f8d82bac0b143ed4432d6cb2937817ec9ab3e1 Mon Sep 17 00:00:00 2001 From: seoyeon615 Date: Fri, 28 Aug 2026 15:50:46 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EB=82=B4=20=EC=A0=95=EC=9B=90=20?= =?UTF-8?q?=ED=99=88=20=ED=99=9C=EB=8F=99=20=EC=9A=94=EC=95=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EB=B3=B4=EB=82=B8=20=EC=82=AC=EC=97=B0=C2=B7=EA=B3=B5?= =?UTF-8?q?=EA=B0=90=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyGardenController.java | 30 ++++++++++ .../controller/MyGardenControllerDocs.java | 32 +++++++++++ .../domain/mygarden/dto/LikedStoryResDto.java | 18 ++++++ .../mygarden/dto/MyActivitySummaryResDto.java | 17 ++++++ .../mygarden/dto/ReceivedLikeResDto.java | 24 ++++++++ .../domain/mygarden/dto/SentStoryResDto.java | 22 +++++++ .../mygarden/mapper/MyGardenMapper.java | 29 ++++++++++ .../mygarden/service/MyGardenService.java | 57 +++++++++++++++++++ .../repository/NotificationRepository.java | 2 +- .../story/repository/StoryLikeRepository.java | 16 ++++++ .../story/repository/StoryRepository.java | 2 + 11 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/likelion/monday/domain/mygarden/dto/LikedStoryResDto.java create mode 100644 src/main/java/com/likelion/monday/domain/mygarden/dto/MyActivitySummaryResDto.java create mode 100644 src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java create mode 100644 src/main/java/com/likelion/monday/domain/mygarden/dto/SentStoryResDto.java create mode 100644 src/main/java/com/likelion/monday/domain/story/repository/StoryLikeRepository.java diff --git a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java index dc6ca5e..5ecd8aa 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java @@ -1,7 +1,11 @@ package com.likelion.monday.domain.mygarden.controller; import com.likelion.monday.domain.account.auth.LoginAccountId; +import com.likelion.monday.domain.mygarden.dto.LikedStoryResDto; +import com.likelion.monday.domain.mygarden.dto.MyActivitySummaryResDto; import com.likelion.monday.domain.mygarden.dto.MyStorySummaryResDto; +import com.likelion.monday.domain.mygarden.dto.ReceivedLikeResDto; +import com.likelion.monday.domain.mygarden.dto.SentStoryResDto; import com.likelion.monday.domain.mygarden.service.MyGardenService; import com.likelion.monday.domain.story.entity.StoryStatus; import com.likelion.monday.global.response.ApiResponse; @@ -17,6 +21,7 @@ public class MyGardenController implements MyGardenControllerDocs { private final MyGardenService myGardenService; + @Override @GetMapping("/stories/preview") public ApiResponse> getMyStoriesPreview(@LoginAccountId Long accountId) { @@ -30,4 +35,29 @@ public ApiResponse> getMyStories( @RequestParam(required = false) StoryStatus status) { return ApiResponse.success(myGardenService.getMyStories(accountId, status)); } + + + @Override + @GetMapping("/summary") + public ApiResponse getActivitySummary(@LoginAccountId Long accountId) { + return ApiResponse.success(myGardenService.getActivitySummary(accountId)); + } + + @Override + @GetMapping("/sent-stories") + public ApiResponse> getSentStories(@LoginAccountId Long accountId) { + return ApiResponse.success(myGardenService.getSentStories(accountId)); + } + + @Override + @GetMapping("/received-likes") + public ApiResponse> getReceivedLikes(@LoginAccountId Long accountId) { + return ApiResponse.success(myGardenService.getReceivedLikes(accountId)); + } + + @Override + @GetMapping("/liked-stories") + public ApiResponse> getLikedStories(@LoginAccountId Long accountId) { + return ApiResponse.success(myGardenService.getLikedStories(accountId)); + } } \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenControllerDocs.java b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenControllerDocs.java index 440e6e5..d0292cd 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenControllerDocs.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenControllerDocs.java @@ -1,6 +1,10 @@ package com.likelion.monday.domain.mygarden.controller; +import com.likelion.monday.domain.mygarden.dto.LikedStoryResDto; +import com.likelion.monday.domain.mygarden.dto.MyActivitySummaryResDto; import com.likelion.monday.domain.mygarden.dto.MyStorySummaryResDto; +import com.likelion.monday.domain.mygarden.dto.ReceivedLikeResDto; +import com.likelion.monday.domain.mygarden.dto.SentStoryResDto; import com.likelion.monday.domain.story.entity.StoryStatus; import com.likelion.monday.global.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; @@ -27,4 +31,32 @@ public interface MyGardenControllerDocs { security = @SecurityRequirement(name = "bearerAuth") ) ApiResponse> getMyStories(@Parameter(hidden = true) Long accountId, StoryStatus status); + + @Operation( + summary = "내 정원 홈 - 활동 요약 조회", + description = "보낸 사연 수, 공감받은 수, 공감한 사연 수를 개수로만 조회한다.", + security = @SecurityRequirement(name = "bearerAuth") + ) + ApiResponse getActivitySummary(@Parameter(hidden = true) Long accountId); + + @Operation( + summary = "보낸 사연 조회", + description = "내가 작성한 사연 전체를 최신순으로 조회한다.", + security = @SecurityRequirement(name = "bearerAuth") + ) + ApiResponse> getSentStories(@Parameter(hidden = true) Long accountId); + + @Operation( + summary = "받은 공감 조회", + description = "내가 쓴 사연들에 달린 공감을 최신순으로 조회한다.", + security = @SecurityRequirement(name = "bearerAuth") + ) + ApiResponse> getReceivedLikes(@Parameter(hidden = true) Long accountId); + + @Operation( + summary = "공감한 사연 조회", + description = "내가 다른 사연에 남긴 공감을 최신순으로 조회한다.", + security = @SecurityRequirement(name = "bearerAuth") + ) + ApiResponse> getLikedStories(@Parameter(hidden = true) Long accountId); } \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/dto/LikedStoryResDto.java b/src/main/java/com/likelion/monday/domain/mygarden/dto/LikedStoryResDto.java new file mode 100644 index 0000000..6261ca5 --- /dev/null +++ b/src/main/java/com/likelion/monday/domain/mygarden/dto/LikedStoryResDto.java @@ -0,0 +1,18 @@ +package com.likelion.monday.domain.mygarden.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + +@Schema(description = "내 정원 - 공감한 사연 목록 항목") +public record LikedStoryResDto( + + @Schema(description = "사연 ID", example = "1") + Long storyId, + + @Schema(description = "사연 제목", example = "우리 집 귀염둥이에게") + String storyTitle, + + @Schema(description = "공감한 일시") + LocalDateTime likedAt +) { +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/dto/MyActivitySummaryResDto.java b/src/main/java/com/likelion/monday/domain/mygarden/dto/MyActivitySummaryResDto.java new file mode 100644 index 0000000..2d05b88 --- /dev/null +++ b/src/main/java/com/likelion/monday/domain/mygarden/dto/MyActivitySummaryResDto.java @@ -0,0 +1,17 @@ +package com.likelion.monday.domain.mygarden.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "내 정원 홈 - 활동 요약") +public record MyActivitySummaryResDto( + + @Schema(description = "내가 보낸 사연 수", example = "3") + long sentStoryCount, + + @Schema(description = "내가 쓴 사연들이 받은 공감 수", example = "24") + long receivedLikeCount, + + @Schema(description = "내가 남긴 공감 수", example = "10") + long likedStoryCount +) { +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java b/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java new file mode 100644 index 0000000..60a4fe3 --- /dev/null +++ b/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java @@ -0,0 +1,24 @@ +package com.likelion.monday.domain.mygarden.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + +@Schema(description = "내 정원 - 받은 공감 목록 항목") +public record ReceivedLikeResDto( + + @Schema(description = "공감 ID", example = "1") + Long likeId, + + @Schema(description = "공감이 달린 사연 ID", example = "1") + Long storyId, + + @Schema(description = "공감이 달린 사연 제목", example = "우리 집 귀염둥이에게") + String storyTitle, + + @Schema(description = "공감을 남긴 사람 닉네임. 비로그인(게스트) 공감이면 null", example = "매기") + String likerNickname, + + @Schema(description = "공감 일시") + LocalDateTime likedAt +) { +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/dto/SentStoryResDto.java b/src/main/java/com/likelion/monday/domain/mygarden/dto/SentStoryResDto.java new file mode 100644 index 0000000..e11328c --- /dev/null +++ b/src/main/java/com/likelion/monday/domain/mygarden/dto/SentStoryResDto.java @@ -0,0 +1,22 @@ +package com.likelion.monday.domain.mygarden.dto; + +import com.likelion.monday.domain.story.entity.StoryStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + +@Schema(description = "내 정원 - 보낸 사연 목록 항목") +public record SentStoryResDto( + + @Schema(description = "사연 ID", example = "1") + Long storyId, + + @Schema(description = "사연 제목", example = "우리 집 귀염둥이에게") + String title, + + @Schema(description = "사연 상태", example = "PENDING") + StoryStatus status, + + @Schema(description = "제출 일시") + LocalDateTime createdAt +) { +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java b/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java index a5c8487..dda5c05 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java @@ -1,7 +1,11 @@ package com.likelion.monday.domain.mygarden.mapper; +import com.likelion.monday.domain.mygarden.dto.LikedStoryResDto; import com.likelion.monday.domain.mygarden.dto.MyStorySummaryResDto; +import com.likelion.monday.domain.mygarden.dto.ReceivedLikeResDto; +import com.likelion.monday.domain.mygarden.dto.SentStoryResDto; import com.likelion.monday.domain.story.entity.Story; +import com.likelion.monday.domain.story.entity.StoryLike; import org.springframework.stereotype.Component; @Component @@ -16,4 +20,29 @@ public MyStorySummaryResDto toSummaryResDto(Story story) { story.getLikeCount(), story.getCreatedAt()); } + + public SentStoryResDto toSentStoryResDto(Story story) { + return new SentStoryResDto( + story.getId(), + story.getTitle(), + story.getStatus(), + story.getCreatedAt()); + } + + // likerNickname은 게스트 공감(guestKey)이면 null이다. + public ReceivedLikeResDto toReceivedLikeResDto(StoryLike like, String likerNickname) { + return new ReceivedLikeResDto( + like.getId(), + like.getStory().getId(), + like.getStory().getTitle(), + likerNickname, + like.getCreatedAt()); + } + + public LikedStoryResDto toLikedStoryResDto(StoryLike like) { + return new LikedStoryResDto( + like.getStory().getId(), + like.getStory().getTitle(), + like.getCreatedAt()); + } } \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java index aca13c2..ed1e8f6 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java @@ -1,11 +1,21 @@ package com.likelion.monday.domain.mygarden.service; +import com.likelion.monday.domain.account.entity.Account; +import com.likelion.monday.domain.account.repository.AccountRepository; +import com.likelion.monday.domain.mygarden.dto.LikedStoryResDto; +import com.likelion.monday.domain.mygarden.dto.MyActivitySummaryResDto; import com.likelion.monday.domain.mygarden.dto.MyStorySummaryResDto; +import com.likelion.monday.domain.mygarden.dto.ReceivedLikeResDto; +import com.likelion.monday.domain.mygarden.dto.SentStoryResDto; import com.likelion.monday.domain.mygarden.mapper.MyGardenMapper; import com.likelion.monday.domain.story.entity.Story; +import com.likelion.monday.domain.story.entity.StoryLike; import com.likelion.monday.domain.story.entity.StoryStatus; +import com.likelion.monday.domain.story.repository.StoryLikeRepository; import com.likelion.monday.domain.story.repository.StoryRepository; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,8 +26,11 @@ public class MyGardenService { private final StoryRepository storyRepository; + private final StoryLikeRepository storyLikeRepository; + private final AccountRepository accountRepository; private final MyGardenMapper myGardenMapper; + public List getMyStoriesPreview(Long accountId) { return storyRepository.findTop2ByAccountIdOrderByCreatedAtDesc(accountId).stream() .map(myGardenMapper::toSummaryResDto) @@ -33,4 +46,48 @@ public List getMyStories(Long accountId, StoryStatus statu .map(myGardenMapper::toSummaryResDto) .toList(); } + + + public MyActivitySummaryResDto getActivitySummary(Long accountId) { + long sentStoryCount = storyRepository.countByAccountId(accountId); + long receivedLikeCount = storyLikeRepository.countByStory_AccountId(accountId); + long likedStoryCount = storyLikeRepository.countByAccountId(accountId); + + return new MyActivitySummaryResDto(sentStoryCount, receivedLikeCount, likedStoryCount); + } + + public List getSentStories(Long accountId) { + return storyRepository.findAllByAccountIdOrderByCreatedAtDesc(accountId).stream() + .map(myGardenMapper::toSentStoryResDto) + .toList(); + } + + public List getReceivedLikes(Long accountId) { + List likes = storyLikeRepository.findAllByStory_AccountIdOrderByCreatedAtDesc(accountId); + Map nicknames = findLikerNicknames(likes); + + return likes.stream() + .map(like -> myGardenMapper.toReceivedLikeResDto(like, nicknames.get(like.getAccountId()))) + .toList(); + } + + public List getLikedStories(Long accountId) { + return storyLikeRepository.findAllByAccountIdOrderByCreatedAtDesc(accountId).stream() + .map(myGardenMapper::toLikedStoryResDto) + .toList(); + } + + private Map findLikerNicknames(List likes) { + List accountIds = likes.stream() + .map(StoryLike::getAccountId) + .filter(id -> id != null) + .distinct() + .toList(); + if (accountIds.isEmpty()) { + return Map.of(); + } + + return accountRepository.findAllById(accountIds).stream() + .collect(Collectors.toMap(Account::getId, Account::getNickname)); + } } \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/notification/repository/NotificationRepository.java b/src/main/java/com/likelion/monday/domain/notification/repository/NotificationRepository.java index 73834da..bb2a043 100644 --- a/src/main/java/com/likelion/monday/domain/notification/repository/NotificationRepository.java +++ b/src/main/java/com/likelion/monday/domain/notification/repository/NotificationRepository.java @@ -4,4 +4,4 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface NotificationRepository extends JpaRepository { -} +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/story/repository/StoryLikeRepository.java b/src/main/java/com/likelion/monday/domain/story/repository/StoryLikeRepository.java new file mode 100644 index 0000000..84d3403 --- /dev/null +++ b/src/main/java/com/likelion/monday/domain/story/repository/StoryLikeRepository.java @@ -0,0 +1,16 @@ +package com.likelion.monday.domain.story.repository; + +import com.likelion.monday.domain.story.entity.StoryLike; +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoryLikeRepository extends JpaRepository { + + long countByStory_AccountId(Long accountId); + + long countByAccountId(Long accountId); + + List findAllByStory_AccountIdOrderByCreatedAtDesc(Long accountId); + + List findAllByAccountIdOrderByCreatedAtDesc(Long accountId); +} \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/story/repository/StoryRepository.java b/src/main/java/com/likelion/monday/domain/story/repository/StoryRepository.java index 90b1f7b..e5e85f8 100644 --- a/src/main/java/com/likelion/monday/domain/story/repository/StoryRepository.java +++ b/src/main/java/com/likelion/monday/domain/story/repository/StoryRepository.java @@ -12,6 +12,8 @@ public interface StoryRepository extends JpaRepository { long countByStatus(StoryStatus status); + long countByAccountId(Long accountId); + Page findAllByStatus(StoryStatus status, Pageable pageable); List findTop2ByAccountIdOrderByCreatedAtDesc(Long accountId); From 8da0ff947b189b44a204c82360e18f0318e18029 Mon Sep 17 00:00:00 2001 From: seoyeon615 Date: Fri, 28 Aug 2026 22:01:24 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EB=B0=9B=EC=9D=80=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=90=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EA=B2=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B3=B5=EA=B0=90=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20NPE=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mygarden/controller/MyGardenController.java | 2 -- .../domain/mygarden/service/MyGardenService.java | 11 ++++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java index 5ecd8aa..0dd621d 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/controller/MyGardenController.java @@ -21,7 +21,6 @@ public class MyGardenController implements MyGardenControllerDocs { private final MyGardenService myGardenService; - @Override @GetMapping("/stories/preview") public ApiResponse> getMyStoriesPreview(@LoginAccountId Long accountId) { @@ -36,7 +35,6 @@ public ApiResponse> getMyStories( return ApiResponse.success(myGardenService.getMyStories(accountId, status)); } - @Override @GetMapping("/summary") public ApiResponse getActivitySummary(@LoginAccountId Long accountId) { diff --git a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java index ed1e8f6..261344b 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java @@ -30,7 +30,6 @@ public class MyGardenService { private final AccountRepository accountRepository; private final MyGardenMapper myGardenMapper; - public List getMyStoriesPreview(Long accountId) { return storyRepository.findTop2ByAccountIdOrderByCreatedAtDesc(accountId).stream() .map(myGardenMapper::toSummaryResDto) @@ -47,7 +46,6 @@ public List getMyStories(Long accountId, StoryStatus statu .toList(); } - public MyActivitySummaryResDto getActivitySummary(Long accountId) { long sentStoryCount = storyRepository.countByAccountId(accountId); long receivedLikeCount = storyLikeRepository.countByStory_AccountId(accountId); @@ -67,7 +65,7 @@ public List getReceivedLikes(Long accountId) { Map nicknames = findLikerNicknames(likes); return likes.stream() - .map(like -> myGardenMapper.toReceivedLikeResDto(like, nicknames.get(like.getAccountId()))) + .map(like -> myGardenMapper.toReceivedLikeResDto(like, findLikerNickname(like, nicknames))) .toList(); } @@ -90,4 +88,11 @@ private Map findLikerNicknames(List likes) { return accountRepository.findAllById(accountIds).stream() .collect(Collectors.toMap(Account::getId, Account::getNickname)); } + + private String findLikerNickname(StoryLike like, Map nicknames) { + if (like.getAccountId() == null) { + return null; + } + return nicknames.get(like.getAccountId()); + } } \ No newline at end of file From 6b68593e91f20d66702f96b4f989a0ee181e4445 Mon Sep 17 00:00:00 2001 From: seoyeon615 Date: Sat, 29 Aug 2026 16:43:32 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EB=B0=9B=EC=9D=80=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=90=20=EC=9D=91=EB=8B=B5=EC=97=90=EC=84=9C=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=90=EC=9E=90=20=EB=8B=89=EB=84=A4=EC=9E=84,=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=90=20=EC=9D=BC=EC=8B=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mygarden/dto/ReceivedLikeResDto.java | 9 +---- .../mygarden/mapper/MyGardenMapper.java | 7 ++-- .../mygarden/service/MyGardenService.java | 35 ++----------------- 3 files changed, 6 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java b/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java index 60a4fe3..1f37c29 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/dto/ReceivedLikeResDto.java @@ -1,7 +1,6 @@ package com.likelion.monday.domain.mygarden.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDateTime; @Schema(description = "내 정원 - 받은 공감 목록 항목") public record ReceivedLikeResDto( @@ -13,12 +12,6 @@ public record ReceivedLikeResDto( Long storyId, @Schema(description = "공감이 달린 사연 제목", example = "우리 집 귀염둥이에게") - String storyTitle, - - @Schema(description = "공감을 남긴 사람 닉네임. 비로그인(게스트) 공감이면 null", example = "매기") - String likerNickname, - - @Schema(description = "공감 일시") - LocalDateTime likedAt + String storyTitle ) { } \ No newline at end of file diff --git a/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java b/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java index dda5c05..d0b12ac 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/mapper/MyGardenMapper.java @@ -29,14 +29,11 @@ public SentStoryResDto toSentStoryResDto(Story story) { story.getCreatedAt()); } - // likerNickname은 게스트 공감(guestKey)이면 null이다. - public ReceivedLikeResDto toReceivedLikeResDto(StoryLike like, String likerNickname) { + public ReceivedLikeResDto toReceivedLikeResDto(StoryLike like) { return new ReceivedLikeResDto( like.getId(), like.getStory().getId(), - like.getStory().getTitle(), - likerNickname, - like.getCreatedAt()); + like.getStory().getTitle()); } public LikedStoryResDto toLikedStoryResDto(StoryLike like) { diff --git a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java index 261344b..bb6d1eb 100644 --- a/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java +++ b/src/main/java/com/likelion/monday/domain/mygarden/service/MyGardenService.java @@ -1,7 +1,5 @@ package com.likelion.monday.domain.mygarden.service; -import com.likelion.monday.domain.account.entity.Account; -import com.likelion.monday.domain.account.repository.AccountRepository; import com.likelion.monday.domain.mygarden.dto.LikedStoryResDto; import com.likelion.monday.domain.mygarden.dto.MyActivitySummaryResDto; import com.likelion.monday.domain.mygarden.dto.MyStorySummaryResDto; @@ -9,13 +7,10 @@ import com.likelion.monday.domain.mygarden.dto.SentStoryResDto; import com.likelion.monday.domain.mygarden.mapper.MyGardenMapper; import com.likelion.monday.domain.story.entity.Story; -import com.likelion.monday.domain.story.entity.StoryLike; import com.likelion.monday.domain.story.entity.StoryStatus; import com.likelion.monday.domain.story.repository.StoryLikeRepository; import com.likelion.monday.domain.story.repository.StoryRepository; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,7 +22,6 @@ public class MyGardenService { private final StoryRepository storyRepository; private final StoryLikeRepository storyLikeRepository; - private final AccountRepository accountRepository; private final MyGardenMapper myGardenMapper; public List getMyStoriesPreview(Long accountId) { @@ -60,12 +54,10 @@ public List getSentStories(Long accountId) { .toList(); } + // 받은 공감: 내가 쓴 사연들에 달린 공감 public List getReceivedLikes(Long accountId) { - List likes = storyLikeRepository.findAllByStory_AccountIdOrderByCreatedAtDesc(accountId); - Map nicknames = findLikerNicknames(likes); - - return likes.stream() - .map(like -> myGardenMapper.toReceivedLikeResDto(like, findLikerNickname(like, nicknames))) + return storyLikeRepository.findAllByStory_AccountIdOrderByCreatedAtDesc(accountId).stream() + .map(myGardenMapper::toReceivedLikeResDto) .toList(); } @@ -74,25 +66,4 @@ public List getLikedStories(Long accountId) { .map(myGardenMapper::toLikedStoryResDto) .toList(); } - - private Map findLikerNicknames(List likes) { - List accountIds = likes.stream() - .map(StoryLike::getAccountId) - .filter(id -> id != null) - .distinct() - .toList(); - if (accountIds.isEmpty()) { - return Map.of(); - } - - return accountRepository.findAllById(accountIds).stream() - .collect(Collectors.toMap(Account::getId, Account::getNickname)); - } - - private String findLikerNickname(StoryLike like, Map nicknames) { - if (like.getAccountId() == null) { - return null; - } - return nicknames.get(like.getAccountId()); - } } \ No newline at end of file