diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java b/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java index 8ad460a8..126fc78b 100644 --- a/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java +++ b/src/main/java/umc/th/juinjang/api/limjang/service/NoteQueryServiceV2.java @@ -1,6 +1,7 @@ package umc.th.juinjang.api.limjang.service; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -63,13 +64,34 @@ public UserNotesShareableGetResponse findNotesShareable(Member member) { List filteredSharedNotes = findUnsharedSharableNotes(member); List imageList = imageFinder.findAllFirstCreatedImagePerNote(filteredSharedNotes); + // 예상 리워드 판별 + Map mapToExpectedReward = mapInCalculateReward(filteredSharedNotes); + return UserNotesShareableGetResponse.of(filteredSharedNotes, mapToNoteIdAndImageId(imageList), - mapToNoteScrapStatus(filteredSharedNotes)); + mapToNoteScrapStatus(filteredSharedNotes), mapToExpectedReward); + } + + private Map mapInCalculateReward(List notes) { + Set noteIdsWithPastSharedHistory = + sharedNoteFinder.findLimjangIdsByDeletedAtIsNotNullAndLimjang(notes); + + Map mapToExpectedRewardPencil = new HashMap<>(); + for (Limjang note : notes) { + mapToExpectedRewardPencil.put(note.getLimjangId(), calculateReward(note, noteIdsWithPastSharedHistory)); + } + return mapToExpectedRewardPencil; + } + + private Long calculateReward(Limjang note, Set previouslySharedNoteIds) { + if (previouslySharedNoteIds.contains(note.getLimjangId())) + return null; + return note.getImageList().isEmpty() ? 2L : 7L; } private List findUnsharedSharableNotes(Member member) { List notes = noteFinder.getAllByMemberWithAddressAndNotePriceWhereIsSharableIsTrueAndDeletedIsFalseAndAddressBcodeIsNotNull( member); + // 이미 공유 중인 임장들 필터링 Set noteIdInSharedNotes = sharedNoteFinder.findLimjangIdsByDeletedAtIsNullAndLimjang(notes); return notes.stream() diff --git a/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java b/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java index 29720ba6..c6c51821 100644 --- a/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java +++ b/src/main/java/umc/th/juinjang/api/limjang/service/response/UserNotesShareableGetResponse.java @@ -24,10 +24,11 @@ record UserNoteShareableResponse( String monthlyRent, Integer pyong, String floor, - String shortAddress + String shortAddress, + Long rewardPencil ) { - static UserNoteShareableResponse of(Limjang limjang, String imageUrl, boolean isScraped) { + static UserNoteShareableResponse of(Limjang limjang, String imageUrl, boolean isScraped, Long rewardPencil) { return new UserNoteShareableResponse( limjang.getLimjangId(), limjang.getPurpose(), limjang.getPropertyType(), limjang.getPriceType(), limjang.getNickname(), @@ -39,17 +40,18 @@ static UserNoteShareableResponse of(Limjang limjang, String imageUrl, boolean is null, limjang.getPyong(), limjang.getFloor(), - limjang.getAddressEntity().getShortAddress() + limjang.getAddressEntity().getShortAddress(), + rewardPencil ); } } public static UserNotesShareableGetResponse of(List limjangs, Map imageUrl, - Map isScraped) { + Map isScraped, Map expectedReward) { return new UserNotesShareableGetResponse( limjangs.stream() .map(it -> UserNoteShareableResponse.of(it, imageUrl.get(it.getLimjangId()), - isScraped.get(it.getLimjangId()))) + isScraped.get(it.getLimjangId()), expectedReward.get(it.getLimjangId()))) .toList()); } } diff --git a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java b/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java index 30b01f61..bec8ec17 100644 --- a/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java +++ b/src/main/java/umc/th/juinjang/api/note/shared/service/SharedNoteFinder.java @@ -85,4 +85,8 @@ public boolean existsByDeletedAtIsNullAndLimjang(Limjang limjang) { public Set findLimjangIdsByDeletedAtIsNullAndLimjang(List notes) { return sharedNoteRepository.findLimjangIdsByDeletedAtIsNullAndLimjang(notes); } + + public Set findLimjangIdsByDeletedAtIsNotNullAndLimjang(List notes) { + return sharedNoteRepository.findLimjangIdsByDeletedAtIsNotNullAndLimjang(notes); + } } diff --git a/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java b/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java index 0ee87ced..06c675c3 100644 --- a/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java +++ b/src/main/java/umc/th/juinjang/domain/note/shared/repository/SharedNoteRepository.java @@ -49,4 +49,7 @@ public interface SharedNoteRepository extends JpaRepository, S @Query("SELECT s.limjang.limjangId FROM SharedNote s WHERE s.limjang in :limjangs AND s.deletedAt is null") Set findLimjangIdsByDeletedAtIsNullAndLimjang(@Param("limjangs") List limjangs); + + @Query("SELECT s.limjang.limjangId FROM SharedNote s WHERE s.limjang in :limjangs AND s.deletedAt is not null") + Set findLimjangIdsByDeletedAtIsNotNullAndLimjang(@Param("limjangs") List limjangs); }