Skip to content

Commit 2675fa3

Browse files
authored
feat: 채팅방 신고 기능 추가 (#483)
* feat: 채팅 신고 기능 추가 * feat: 테스트 코드 추가
1 parent 5d18bd2 commit 2675fa3

File tree

3 files changed

+66
-2
lines changed

3 files changed

+66
-2
lines changed

src/main/java/com/example/solidconnection/report/domain/TargetType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum TargetType {
44

55
POST,
6+
CHAT
67
;
78
}

src/main/java/com/example/solidconnection/report/service/ReportService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.solidconnection.report.service;
22

3+
import com.example.solidconnection.chat.repository.ChatMessageRepository;
34
import com.example.solidconnection.common.exception.CustomException;
45
import com.example.solidconnection.common.exception.ErrorCode;
56
import com.example.solidconnection.community.post.repository.PostRepository;
@@ -19,6 +20,7 @@ public class ReportService {
1920
private final ReportRepository reportRepository;
2021
private final SiteUserRepository siteUserRepository;
2122
private final PostRepository postRepository;
23+
private final ChatMessageRepository chatMessageRepository;
2224

2325
@Transactional
2426
public void createReport(long reporterId, ReportRequest request) {
@@ -37,7 +39,12 @@ private void validateReporterExists(long reporterId) {
3739
}
3840

3941
private void validateTargetExists(TargetType targetType, long targetId) {
40-
if (targetType == TargetType.POST && !postRepository.existsById(targetId)) {
42+
boolean exists = switch (targetType) {
43+
case POST -> postRepository.existsById(targetId);
44+
case CHAT -> chatMessageRepository.existsById(targetId);
45+
};
46+
47+
if (!exists) {
4148
throw new CustomException(ErrorCode.REPORT_TARGET_NOT_FOUND);
4249
}
4350
}

src/test/java/com/example/solidconnection/report/service/ReportServiceTest.java

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.assertj.core.api.Assertions.assertThatCode;
55

6+
import com.example.solidconnection.chat.domain.ChatMessage;
7+
import com.example.solidconnection.chat.domain.ChatRoom;
8+
import com.example.solidconnection.chat.fixture.ChatMessageFixture;
9+
import com.example.solidconnection.chat.fixture.ChatRoomFixture;
610
import com.example.solidconnection.common.exception.CustomException;
711
import com.example.solidconnection.common.exception.ErrorCode;
812
import com.example.solidconnection.community.board.domain.Board;
@@ -45,18 +49,27 @@ class ReportServiceTest {
4549
@Autowired
4650
private ReportFixture reportFixture;
4751

52+
@Autowired
53+
private ChatRoomFixture chatRoomFixture;
54+
55+
@Autowired
56+
private ChatMessageFixture chatMessageFixture;
57+
4858
private SiteUser siteUser;
4959
private Post post;
60+
private ChatMessage chatMessage;
5061

5162
@BeforeEach
5263
void setUp() {
5364
siteUser = siteUserFixture.사용자();
5465
Board board = boardFixture.자유게시판();
5566
post = postFixture.게시글(board, siteUser);
67+
ChatRoom chatRoom = chatRoomFixture.채팅방(false);
68+
chatMessage = chatMessageFixture.메시지("채팅", siteUser.getId(), chatRoom);
5669
}
5770

5871
@Nested
59-
class 신고_생성 {
72+
class 포스트_신고 {
6073

6174
@Test
6275
void 정상적으로_신고한다() {
@@ -96,4 +109,47 @@ class 신고_생성 {
96109
.hasMessageContaining(ErrorCode.ALREADY_REPORTED_BY_CURRENT_USER.getMessage());
97110
}
98111
}
112+
113+
@Nested
114+
class 채팅_신고 {
115+
116+
@Test
117+
void 정상적으로_신고한다() {
118+
// given
119+
ReportRequest request = new ReportRequest(ReportType.INSULT, TargetType.CHAT, chatMessage.getId());
120+
121+
// when
122+
reportService.createReport(siteUser.getId(), request);
123+
124+
// then
125+
boolean isSaved = reportRepository.existsByReporterIdAndTargetTypeAndTargetId(
126+
siteUser.getId(), TargetType.CHAT, chatMessage.getId());
127+
assertThat(isSaved).isTrue();
128+
}
129+
130+
@Test
131+
void 신고_대상이_존재하지_않으면_예외가_발생한다() {
132+
// given
133+
long notExistingId = 999L;
134+
ReportRequest request = new ReportRequest(ReportType.SPAM, TargetType.CHAT, notExistingId);
135+
136+
// when & then
137+
assertThatCode(() -> reportService.createReport(siteUser.getId(), request))
138+
.isInstanceOf(CustomException.class)
139+
.hasMessageContaining(ErrorCode.REPORT_TARGET_NOT_FOUND.getMessage());
140+
}
141+
142+
@Test
143+
void 이미_신고한_경우_예외가_발생한다() {
144+
// given
145+
reportFixture.신고(siteUser.getId(), TargetType.CHAT, chatMessage.getId());
146+
ReportRequest request = new ReportRequest(ReportType.INSULT, TargetType.CHAT, chatMessage.getId());
147+
148+
// when & then
149+
assertThatCode(() -> reportService.createReport(siteUser.getId(), request))
150+
.isInstanceOf(CustomException.class)
151+
.hasMessageContaining(ErrorCode.ALREADY_REPORTED_BY_CURRENT_USER.getMessage());
152+
}
153+
}
99154
}
155+

0 commit comments

Comments
 (0)