Skip to content

Commit 0c905c2

Browse files
committed
feat: 쪽지 상세 조회 기능 서비스 레이어 구현
- 기관의 쪽지 상세보기 메서드 구현 - 봉사자의 쪽지 상세보기 메서드 구현 - 테스트 코드 작성및 검증 완료
1 parent bb01de3 commit 0c905c2

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed

src/main/java/com/somemore/note/service/NoteQueryService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.somemore.note.service;
22

3+
import com.somemore.global.exception.NoSuchElementException;
34
import com.somemore.note.repository.NoteRepository;
5+
import com.somemore.note.repository.mapper.NoteDetailViewForCenter;
6+
import com.somemore.note.repository.mapper.NoteDetailViewForVolunteer;
47
import com.somemore.note.repository.mapper.NoteReceiverViewForCenter;
58
import com.somemore.note.repository.mapper.NoteReceiverViewForVolunteer;
69
import com.somemore.note.usecase.NoteQueryUseCase;
@@ -12,6 +15,8 @@
1215

1316
import java.util.UUID;
1417

18+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_NOTE;
19+
1520
@RequiredArgsConstructor
1621
@Service
1722
@Transactional(readOnly = true)
@@ -28,4 +33,17 @@ public Page<NoteReceiverViewForCenter> getNotesForCenter(UUID centerId, Pageable
2833
public Page<NoteReceiverViewForVolunteer> getNotesForVolunteer(UUID volunteerId, Pageable pageable) {
2934
return noteRepository.findNotesByReceiverIsVolunteer(volunteerId, pageable);
3035
}
36+
37+
@Override
38+
public NoteDetailViewForCenter getNoteDetailForCenter(Long noteId) {
39+
return noteRepository.findNoteDetailViewReceiverIsCenter(noteId)
40+
.orElseThrow(() -> new NoSuchElementException(NOT_EXISTS_NOTE));
41+
}
42+
43+
@Override
44+
public NoteDetailViewForVolunteer getNoteDetailForVolunteer(Long noteId) {
45+
return noteRepository.findNoteDetailViewReceiverIsVolunteer(noteId)
46+
.orElseThrow(() -> new NoSuchElementException(NOT_EXISTS_NOTE));
47+
}
48+
3149
}

src/main/java/com/somemore/note/usecase/NoteQueryUseCase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.somemore.note.usecase;
22

3+
import com.somemore.note.repository.mapper.NoteDetailViewForCenter;
4+
import com.somemore.note.repository.mapper.NoteDetailViewForVolunteer;
35
import com.somemore.note.repository.mapper.NoteReceiverViewForCenter;
46
import com.somemore.note.repository.mapper.NoteReceiverViewForVolunteer;
57
import org.springframework.data.domain.Page;
@@ -10,4 +12,6 @@
1012
public interface NoteQueryUseCase {
1113
Page<NoteReceiverViewForCenter> getNotesForCenter(UUID centerId, Pageable pageable);
1214
Page<NoteReceiverViewForVolunteer> getNotesForVolunteer(UUID volunteerId, Pageable pageable);
15+
NoteDetailViewForCenter getNoteDetailForCenter(Long noteId);
16+
NoteDetailViewForVolunteer getNoteDetailForVolunteer(Long noteId);
1317
}

src/test/java/com/somemore/note/service/NoteQueryServiceTest.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import com.somemore.IntegrationTestSupport;
44
import com.somemore.center.domain.Center;
55
import com.somemore.center.repository.CenterJpaRepository;
6+
import com.somemore.global.exception.NoSuchElementException;
67
import com.somemore.note.domain.Note;
78
import com.somemore.note.repository.NoteRepository;
9+
import com.somemore.note.repository.mapper.NoteDetailViewForCenter;
10+
import com.somemore.note.repository.mapper.NoteDetailViewForVolunteer;
811
import com.somemore.note.repository.mapper.NoteReceiverViewForCenter;
912
import com.somemore.note.repository.mapper.NoteReceiverViewForVolunteer;
1013
import com.somemore.volunteer.domain.Volunteer;
@@ -20,7 +23,9 @@
2023
import java.util.UUID;
2124

2225
import static com.somemore.auth.oauth.OAuthProvider.NAVER;
26+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_NOTE;
2327
import static org.assertj.core.api.Assertions.assertThat;
28+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2429

2530
@Transactional
2631
class NoteQueryServiceTest extends IntegrationTestSupport {
@@ -73,6 +78,81 @@ void getNotesForVolunteer() {
7378
assertThat(result.getContent().getFirst().title()).isEqualTo("Note 9");
7479
}
7580

81+
@DisplayName("기관은 자신에게 온 쪽지의 상세 내용을 확인할 수 있다 (Service)")
82+
@Test
83+
void getNoteDetailForCenter() {
84+
// given
85+
UUID centerId = UUID.randomUUID();
86+
Volunteer volunteer = createVolunteer();
87+
Note note = createNote(centerId, volunteer.getId());
88+
89+
// when
90+
NoteDetailViewForCenter result = noteQueryService.getNoteDetailForCenter(note.getId());
91+
92+
//then
93+
assertThat(result).isNotNull();
94+
assertThat(result.noteId()).isEqualTo(note.getId());
95+
assertThat(result.title()).isEqualTo(note.getTitle());
96+
assertThat(result.content()).isEqualTo(note.getContent());
97+
assertThat(result.senderId()).isEqualTo(volunteer.getId());
98+
assertThat(result.senderName()).isEqualTo(volunteer.getNickname());
99+
assertThat(result.senderProfileImgLink()).isEqualTo(volunteer.getImgUrl());
100+
assertThat(result.createdAt()).isEqualTo(note.getCreatedAt());
101+
}
102+
103+
@DisplayName("존재하지 않는 쪽지 조회 시 예외를 던진다 - 기관")
104+
@Test
105+
void getNoteDetailForCenter_NotFound() {
106+
// given
107+
Long nonExistentNoteId = 9999L;
108+
109+
// when, then
110+
assertThatThrownBy(() -> noteQueryService.getNoteDetailForCenter(nonExistentNoteId))
111+
.isInstanceOf(NoSuchElementException.class)
112+
.hasMessage(NOT_EXISTS_NOTE.getMessage());
113+
}
114+
115+
@DisplayName("봉사자는 자신에게 온 쪽지의 상세 내용을 확인할 수 있다 (Service)")
116+
@Test
117+
void getNoteDetailForVolunteer() {
118+
// given
119+
UUID volunteerId = UUID.randomUUID();
120+
Center center = createCenter();
121+
Note note = createNote(volunteerId, center.getId());
122+
123+
// when
124+
NoteDetailViewForVolunteer result = noteQueryService.getNoteDetailForVolunteer(note.getId());
125+
126+
//then
127+
assertThat(result).isNotNull();
128+
assertThat(result.noteId()).isEqualTo(note.getId());
129+
assertThat(result.title()).isEqualTo(note.getTitle());
130+
assertThat(result.content()).isEqualTo(note.getContent());
131+
assertThat(result.senderId()).isEqualTo(center.getId());
132+
assertThat(result.senderName()).isEqualTo(center.getName());
133+
assertThat(result.senderProfileImgLink()).isEqualTo(center.getImgUrl());
134+
assertThat(result.createdAt()).isEqualTo(note.getCreatedAt());
135+
}
136+
137+
@DisplayName("존재하지 않는 쪽지 조회 시 예외를 던진다 - 봉사자")
138+
@Test
139+
void getNoteDetailForVolunteer_NotFound() {
140+
// given
141+
Long nonExistentNoteId = 9999L;
142+
143+
// when, then
144+
assertThatThrownBy(() -> noteQueryService.getNoteDetailForVolunteer(nonExistentNoteId))
145+
.isInstanceOf(NoSuchElementException.class)
146+
.hasMessage(NOT_EXISTS_NOTE.getMessage());
147+
}
148+
149+
private Note createNote(UUID receiverId, UUID senderId){
150+
Note note = Note.create(senderId, receiverId, "제목", "내용");
151+
noteRepository.save(note);
152+
153+
return note;
154+
}
155+
76156
private void createTestNotesForCenter(UUID centerId) {
77157
for (int i = 1; i <= 15; i++) {
78158
Volunteer volunteer = createVolunteer();

0 commit comments

Comments
 (0)