Skip to content

Commit e3d9687

Browse files
authored
fix: stomp controller 수정 (#125)
* fix: Stomp 컨트롤러 수정 * test: 테스트 코드 수정
1 parent f5e084b commit e3d9687

File tree

11 files changed

+111
-117
lines changed

11 files changed

+111
-117
lines changed

src/main/java/com/oronaminc/join/answer/dto/AnswerRequest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.validation.constraints.NotBlank;
5+
import jakarta.validation.constraints.NotNull;
56
import jakarta.validation.constraints.Size;
67

78
@Schema(description = "답변 생성/수정 요청 DTO")
89
public record AnswerRequest(
910
@NotBlank(message = "답변 내용을 입력해주시기 바랍니다.")
1011
@Size(max = 300, message = "답변 내용은 최대 300자까지 입력할 수 있습니다.")
1112
@Schema(description = "답변 내용", example = "답변입니다.")
12-
String content
13+
String content,
14+
@NotNull
15+
Long memberId
1316
) {
1417

1518
}

src/main/java/com/oronaminc/join/emoji/dto/EmojiRequest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ public record EmojiRequest(
1111
TargetType targetType,
1212
@NotNull
1313
@Schema(description = "공감 대상 ID", example = "1")
14-
Long targetId
14+
Long targetId,
15+
@NotNull
16+
Long memberId
1517
) {
1618

1719
}

src/main/java/com/oronaminc/join/websocket/api/AnswerWebsocketController.java

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.oronaminc.join.websocket.api;
22

3-
import static com.oronaminc.join.global.exception.ErrorCode.TOO_MANY_REQUESTS_ANSWER;
4-
import static com.oronaminc.join.global.exception.ErrorCode.UNAUTHORIZED_MEMBER;
3+
import static com.oronaminc.join.global.exception.ErrorCode.*;
4+
5+
import org.springframework.messaging.handler.annotation.DestinationVariable;
6+
import org.springframework.messaging.handler.annotation.MessageMapping;
7+
import org.springframework.messaging.handler.annotation.Payload;
8+
import org.springframework.messaging.handler.annotation.SendTo;
9+
import org.springframework.stereotype.Controller;
510

611
import com.oronaminc.join.answer.domain.Answer;
712
import com.oronaminc.join.answer.dto.AnswerCreateResponse;
@@ -11,19 +16,14 @@
1116
import com.oronaminc.join.answer.mapper.AnswerMapper;
1217
import com.oronaminc.join.answer.service.AnswerService;
1318
import com.oronaminc.join.global.exception.ErrorException;
14-
import com.oronaminc.join.websocket.common.EventType;
1519
import com.oronaminc.join.global.ratelimit.RateLimitService;
1620
import com.oronaminc.join.global.ratelimit.RateLimitType;
21+
import com.oronaminc.join.websocket.common.EventType;
22+
1723
import io.github.bucket4j.Bucket;
1824
import jakarta.validation.Valid;
19-
import java.security.Principal;
2025
import lombok.RequiredArgsConstructor;
2126
import lombok.extern.slf4j.Slf4j;
22-
import org.springframework.messaging.handler.annotation.DestinationVariable;
23-
import org.springframework.messaging.handler.annotation.MessageMapping;
24-
import org.springframework.messaging.handler.annotation.Payload;
25-
import org.springframework.messaging.handler.annotation.SendTo;
26-
import org.springframework.stereotype.Controller;
2727

2828
@Slf4j
2929
@Controller
@@ -38,10 +38,9 @@ public class AnswerWebsocketController {
3838
public AnswerCreateResponse create(
3939
@DestinationVariable Long roomId,
4040
@DestinationVariable Long questionId,
41-
@Payload @Valid AnswerRequest request,
42-
Principal principal
41+
@Payload @Valid AnswerRequest request
4342
) {
44-
Long memberId = getMemberId(principal);
43+
Long memberId = request.memberId();
4544

4645
Bucket bucket = rateLimitService.getBucket(RateLimitType.CREATE_ANSWER, roomId, memberId, questionId);
4746

@@ -60,11 +59,10 @@ public AnswerCreateResponse create(
6059
@SendTo("/topic/rooms/{roomId}/answers")
6160
public AnswerUpdateResponse update(
6261
@DestinationVariable Long answerId,
63-
@Payload @Valid AnswerRequest request,
64-
Principal principal
62+
@Payload @Valid AnswerRequest request
6563
) {
6664

67-
Long memberId = getMemberId(principal);
65+
Long memberId = request.memberId();
6866

6967
Answer answer = answerService.update(answerId, memberId, request);
7068

@@ -77,9 +75,9 @@ public AnswerUpdateResponse update(
7775
@SendTo("/topic/rooms/{roomId}/answers")
7876
public AnswerDeleteResponse delete(
7977
@DestinationVariable Long answerId,
80-
Principal principal
78+
@Payload @Valid StompMemberRequest request
8179
) {
82-
Long memberId = getMemberId(principal);
80+
Long memberId = request.memberId();
8381

8482
answerService.delete(answerId, memberId);
8583

@@ -88,11 +86,4 @@ public AnswerDeleteResponse delete(
8886
return new AnswerDeleteResponse(answerId, EventType.DELETE);
8987
}
9088

91-
private Long getMemberId(Principal principal) {
92-
if (principal == null) {
93-
throw new ErrorException(UNAUTHORIZED_MEMBER);
94-
}
95-
return Long.valueOf(principal.getName());
96-
}
97-
9889
}

src/main/java/com/oronaminc/join/websocket/api/EmojiWebsocketController.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package com.oronaminc.join.websocket.api;
22

3+
import org.springframework.messaging.handler.annotation.DestinationVariable;
4+
import org.springframework.messaging.handler.annotation.MessageMapping;
5+
import org.springframework.messaging.handler.annotation.Payload;
6+
import org.springframework.messaging.handler.annotation.SendTo;
7+
import org.springframework.stereotype.Controller;
8+
39
import com.oronaminc.join.emoji.dto.EmojiRequest;
410
import com.oronaminc.join.emoji.dto.EmojiResponse;
511
import com.oronaminc.join.emoji.service.EmojiFacade;
612
import com.oronaminc.join.global.exception.ErrorCode;
713
import com.oronaminc.join.global.exception.ErrorException;
814
import com.oronaminc.join.global.ratelimit.RateLimitService;
915
import com.oronaminc.join.global.ratelimit.RateLimitType;
16+
1017
import io.github.bucket4j.Bucket;
1118
import jakarta.validation.Valid;
12-
import java.security.Principal;
1319
import lombok.RequiredArgsConstructor;
14-
import org.springframework.messaging.handler.annotation.DestinationVariable;
15-
import org.springframework.messaging.handler.annotation.MessageMapping;
16-
import org.springframework.messaging.handler.annotation.Payload;
17-
import org.springframework.messaging.handler.annotation.SendTo;
18-
import org.springframework.stereotype.Controller;
1920

2021
@Controller
2122
@RequiredArgsConstructor
@@ -28,10 +29,9 @@ public class EmojiWebsocketController {
2829
@SendTo("/topic/rooms/{roomId}/emojis")
2930
public EmojiResponse createEmoji(
3031
@DestinationVariable Long roomId,
31-
@Payload @Valid EmojiRequest emojiRequest,
32-
Principal principal
32+
@Payload @Valid EmojiRequest emojiRequest
3333
) {
34-
Long memberId = Long.valueOf(principal.getName());
34+
Long memberId = emojiRequest.memberId();
3535

3636
Bucket bucket = rateLimitService.getBucket(RateLimitType.EMOJI, memberId,
3737
emojiRequest.targetType(), emojiRequest.targetId());
@@ -47,10 +47,9 @@ public EmojiResponse createEmoji(
4747
@SendTo("/topic/rooms/{roomId}/emojis")
4848
public EmojiResponse deleteEmoji(
4949
@DestinationVariable Long roomId,
50-
@Payload @Valid EmojiRequest emojiRequest,
51-
Principal principal
50+
@Payload @Valid EmojiRequest emojiRequest
5251
) {
53-
Long memberId = Long.valueOf(principal.getName());
52+
Long memberId = emojiRequest.memberId();
5453

5554
Bucket bucket = rateLimitService.getBucket(RateLimitType.EMOJI, memberId,
5655
emojiRequest.targetType(), emojiRequest.targetId());

src/main/java/com/oronaminc/join/websocket/api/QuestionWebsocketController.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.oronaminc.join.websocket.api;
22

3-
import java.security.Principal;
4-
53
import org.springframework.messaging.handler.annotation.DestinationVariable;
64
import org.springframework.messaging.handler.annotation.MessageMapping;
75
import org.springframework.messaging.handler.annotation.Payload;
@@ -37,11 +35,9 @@ public class QuestionWebsocketController {
3735
@SendTo("/topic/rooms/{roomId}/questions")
3836
public QuestionCreateResponse createQuestion(
3937
@DestinationVariable Long roomId,
40-
@Payload @Valid QuestionRequest request,
41-
Principal principal
38+
@Payload @Valid QuestionRequest request
4239
) {
4340
log.debug("수신한 메시지 = {}", request.content());
44-
log.debug("principal = {}", principal);
4541

4642
Long memberId = request.memberId();
4743

@@ -64,11 +60,10 @@ public QuestionCreateResponse createQuestion(
6460
public QuestionUpdateResponse updateQuestion(
6561
@DestinationVariable Long roomId,
6662
@DestinationVariable Long questionId,
67-
@Payload @Valid QuestionRequest request,
68-
Principal principal
63+
@Payload @Valid QuestionRequest request
6964
) {
7065

71-
Long memberId = Long.valueOf(principal.getName());
66+
Long memberId = request.memberId();
7267

7368
Question updated = questionService.update(memberId, roomId, questionId, request);
7469

@@ -80,9 +75,9 @@ public QuestionUpdateResponse updateQuestion(
8075
public QuestionDeleteResponse deleteQuestion(
8176
@DestinationVariable Long roomId,
8277
@DestinationVariable Long questionId,
83-
Principal principal
78+
@Payload @Valid StompMemberRequest request
8479
) {
85-
Long memberId = Long.valueOf(principal.getName());
80+
Long memberId = request.memberId();
8681

8782
Long deletedId = questionService.delete(memberId, roomId, questionId);
8883

src/main/java/com/oronaminc/join/websocket/api/RoomWebsocketController.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.oronaminc.join.websocket.api;
22

3-
import java.security.Principal;
4-
53
import org.springframework.messaging.Message;
64
import org.springframework.messaging.handler.annotation.DestinationVariable;
75
import org.springframework.messaging.handler.annotation.MessageMapping;
@@ -25,10 +23,10 @@ public class RoomWebsocketController {
2523
@SendTo("/topic/rooms/{roomId}/join")
2624
public RoomJoinResponse joinRoom(
2725
@DestinationVariable Long roomId,
28-
Principal principal,
26+
StompMemberRequest request,
2927
Message<?> message
3028
) {
31-
Long memberId = Long.valueOf(principal.getName());
29+
Long memberId = request.memberId();
3230
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
3331
String sessionId = accessor.getSessionId();
3432

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.oronaminc.join.websocket.api;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
public record StompMemberRequest(
6+
@NotNull
7+
Long memberId
8+
) {
9+
}

src/test/java/com/oronaminc/join/answer/service/AnswerServiceTests.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
package com.oronaminc.join.answer.service;
22

3-
import static com.oronaminc.join.global.exception.ErrorCode.NOT_FOUND_ROOM;
4-
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
5-
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
6-
import static org.assertj.core.api.InstanceOfAssertFactories.LIST;
7-
import static org.mockito.ArgumentMatchers.any;
8-
import static org.mockito.ArgumentMatchers.anyLong;
9-
import static org.mockito.ArgumentMatchers.eq;
10-
import static org.mockito.BDDMockito.given;
3+
import static com.oronaminc.join.global.exception.ErrorCode.*;
4+
import static org.assertj.core.api.AssertionsForClassTypes.*;
5+
import static org.assertj.core.api.InstanceOfAssertFactories.*;
6+
import static org.mockito.ArgumentMatchers.*;
7+
import static org.mockito.BDDMockito.*;
8+
9+
import java.time.LocalDateTime;
10+
import java.util.List;
11+
import java.util.Set;
12+
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.DisplayName;
15+
import org.junit.jupiter.api.Test;
16+
import org.junit.jupiter.api.extension.ExtendWith;
17+
import org.mockito.InjectMocks;
18+
import org.mockito.Mock;
19+
import org.mockito.junit.jupiter.MockitoExtension;
20+
import org.springframework.data.domain.Slice;
21+
import org.springframework.test.util.ReflectionTestUtils;
1122

1223
import com.oronaminc.join.answer.dao.AnswerRepository;
1324
import com.oronaminc.join.answer.domain.Answer;
@@ -31,18 +42,6 @@
3142
import com.oronaminc.join.room.domain.Room;
3243
import com.oronaminc.join.room.domain.RoomStatus;
3344
import com.oronaminc.join.room.service.RoomReader;
34-
import java.time.LocalDateTime;
35-
import java.util.List;
36-
import java.util.Set;
37-
import org.junit.jupiter.api.BeforeEach;
38-
import org.junit.jupiter.api.DisplayName;
39-
import org.junit.jupiter.api.Test;
40-
import org.junit.jupiter.api.extension.ExtendWith;
41-
import org.mockito.InjectMocks;
42-
import org.mockito.Mock;
43-
import org.mockito.junit.jupiter.MockitoExtension;
44-
import org.springframework.data.domain.Slice;
45-
import org.springframework.test.util.ReflectionTestUtils;
4645

4746
@ExtendWith(MockitoExtension.class)
4847
public class AnswerServiceTests {
@@ -114,7 +113,7 @@ void setUp() {
114113
.participantType(ParticipantType.TEAM)
115114
.build();
116115

117-
request = new AnswerRequest("답변입니다.");
116+
request = new AnswerRequest("답변입니다.", mockMember.getId());
118117
}
119118

120119
@Test
@@ -258,7 +257,7 @@ void updateAnswer_success() {
258257
given(permissionValidator.validateAnswerUpdatePermission(1L, 1L))
259258
.willReturn(answer);
260259

261-
AnswerRequest request = new AnswerRequest("수정된 내용");
260+
AnswerRequest request = new AnswerRequest("수정된 내용", 1L);
262261

263262
// when
264263
Answer result = answerService.update(answer.getId(), answer.getMember().getId(), request);

src/test/java/com/oronaminc/join/emoji/service/EmojiFacadeTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void createEmoji_success_test() throws InterruptedException {
8989
executorService.submit(() -> {
9090
try {
9191
emojiFacade.createEmoji(members.get(idx).getId(),
92-
new EmojiRequest(TargetType.ROOM, roomId));
92+
new EmojiRequest(TargetType.ROOM, roomId, members.get(idx).getId()));
9393
} catch (Exception e) {
9494
e.printStackTrace();
9595
} finally {
@@ -147,7 +147,7 @@ void deleteEmoji_success_test() throws InterruptedException {
147147
executorService.submit(() -> {
148148
try {
149149
emojiFacade.deleteEmoji(members.get(idx).getId(),
150-
new EmojiRequest(TargetType.ROOM, roomId));
150+
new EmojiRequest(TargetType.ROOM, roomId, members.get(idx).getId()));
151151
} catch (Exception e) {
152152
e.printStackTrace();
153153
} finally {

0 commit comments

Comments
 (0)