Skip to content

Commit 4135126

Browse files
Merge pull request #199 from prgrms-web-devcourse-final-project/refactor/mailbox-refactoring(WR9-119)
refactor: 내 편지함 목록 조회, 편지함 상세 조회 쿼리 수정 (WR9-119)
2 parents 82a3da5 + c4590eb commit 4135126

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

src/main/java/io/crops/warmletter/domain/letter/repository/LetterMatchingRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public interface LetterMatchingRepository extends JpaRepository<LetterMatching,
4141
"COALESCE(COUNT(l), 0)" +
4242
") " +
4343
"FROM LetterMatching lm " +
44-
"LEFT JOIN Letter l ON lm.id = l.matchingId AND l.status = 'DELIVERED' AND l.isActive = true " +
44+
"LEFT JOIN Letter l ON lm.id = l.matchingId AND (l.status = 'DELIVERED' OR l.writerId = :myId) AND l.isActive = true " +
4545
"JOIN Member m ON (CASE WHEN lm.firstMemberId = :myId THEN lm.secondMemberId ELSE lm.firstMemberId END) = m.id " +
4646
"WHERE (lm.firstMemberId = :myId OR lm.secondMemberId = :myId) " +
4747
"GROUP BY lm.id, m.zipCode, lm.isActive " +

src/main/java/io/crops/warmletter/domain/letter/repository/LetterRepository.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import java.time.LocalDateTime;
1717
import java.util.List;
18-
import java.util.Map;
1918
import java.util.Optional;
2019

2120

@@ -39,8 +38,14 @@ public interface LetterRepository extends JpaRepository<Letter, Long> {
3938

4039
Optional<Letter> findByIdAndWriterId(Long letterId, Long writerId);
4140

42-
Page<Letter> findByMatchingIdAndIsActiveTrueOrderByIdDesc(Long matchingId, Pageable pageable);
43-
41+
@Query("SELECT l FROM Letter l WHERE l.matchingId = :matchingId AND l.isActive = true " +
42+
"AND (l.writerId = :currentUserId OR l.status = 'DELIVERED') " +
43+
"ORDER BY l.id DESC")
44+
Page<Letter> findDeliveredOrMyLettersByMatchingId(
45+
@Param("matchingId") Long matchingId,
46+
@Param("userId") Long currentUserId,
47+
Pageable pageable
48+
);
4449
List<Letter> findByReceiverIdAndStatus(Long currentUserId, Status status);
4550

4651
@Query("SELECT new io.crops.warmletter.domain.letter.dto.response.LetterDraftResponse(" +

src/main/java/io/crops/warmletter/domain/letter/service/MailboxService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.crops.warmletter.domain.letter.exception.MatchingNotFoundException;
1111
import io.crops.warmletter.domain.letter.repository.LetterMatchingRepository;
1212
import io.crops.warmletter.domain.letter.repository.LetterRepository;
13-
import io.crops.warmletter.domain.member.repository.MemberRepository;
1413
import lombok.RequiredArgsConstructor;
1514
import lombok.extern.slf4j.Slf4j;
1615
import org.springframework.data.domain.Page;
@@ -28,7 +27,6 @@ public class MailboxService {
2827

2928
private final LetterMatchingRepository letterMatchingRepository;
3029
private final LetterRepository letterRepository;
31-
private final MemberRepository memberRepository;
3230
private final AuthFacade authFacade;
3331

3432
public List<MailboxResponse> getMailbox(){
@@ -52,7 +50,7 @@ public Page<MailboxDetailResponse> detailMailbox(Long matchingId, Pageable pagea
5250
}
5351

5452
// 4. LetterRepository에서 matchingId에 해당하는 편지들을 조회
55-
Page<Letter> letterPage = letterRepository.findByMatchingIdAndIsActiveTrueOrderByIdDesc(matchingId, pageable);
53+
Page<Letter> letterPage = letterRepository.findDeliveredOrMyLettersByMatchingId(matchingId, myId, pageable);
5654

5755
// 5. 조회된 Letter 엔티티들을 MailboxDetailResponse DTO로 변환
5856
Page<MailboxDetailResponse> responses = letterPage.map(letter ->

src/test/java/io/crops/warmletter/domain/letter/service/MailboxServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ void detailMailbox_Success() {
236236
Pageable pageable = PageRequest.of(0, 10, Sort.by("id").descending());
237237
Page<Letter> letterPage = new PageImpl<>(letters, pageable, letters.size());
238238

239-
when(letterRepository.findByMatchingIdAndIsActiveTrueOrderByIdDesc(matchingId, pageable)).thenReturn(letterPage);
239+
when(letterRepository.findDeliveredOrMyLettersByMatchingId(matchingId, myId, pageable)).thenReturn(letterPage);
240240

241241
// when
242242
Page<MailboxDetailResponse> result = mailBoxService.detailMailbox(matchingId, pageable);
@@ -253,7 +253,7 @@ void detailMailbox_Success() {
253253
// 호출 검증
254254
verify(authFacade).getCurrentUserId();
255255
verify(letterMatchingRepository).findById(matchingId);
256-
verify(letterRepository).findByMatchingIdAndIsActiveTrueOrderByIdDesc(matchingId, pageable);
256+
verify(letterRepository).findDeliveredOrMyLettersByMatchingId(matchingId, myId, pageable);
257257
}
258258

259259

0 commit comments

Comments
 (0)