Skip to content

Commit 157ca1c

Browse files
committed
♻️ answerMessage 삭제,엔드포인트 통일
1 parent 5d0ceb5 commit 157ca1c

File tree

6 files changed

+85
-81
lines changed

6 files changed

+85
-81
lines changed

backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.f1.backend.domain.game.app;
22

33
import static io.f1.backend.domain.game.mapper.RoomMapper.ofPlayerEvent;
4-
import static io.f1.backend.domain.game.mapper.RoomMapper.toChatMessage;
54
import static io.f1.backend.domain.game.mapper.RoomMapper.toGameSetting;
65
import static io.f1.backend.domain.game.mapper.RoomMapper.toGameSettingResponse;
76
import static io.f1.backend.domain.game.mapper.RoomMapper.toPlayerListResponse;
@@ -18,7 +17,6 @@
1817
import io.f1.backend.domain.game.dto.RoomExitData;
1918
import io.f1.backend.domain.game.dto.RoomInitialData;
2019
import io.f1.backend.domain.game.dto.RoundResult;
21-
import io.f1.backend.domain.game.dto.request.AnswerMessage;
2220
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
2321
import io.f1.backend.domain.game.dto.request.RoomValidationRequest;
2422
import io.f1.backend.domain.game.dto.response.GameSettingResponse;
@@ -41,18 +39,15 @@
4139
import io.f1.backend.global.exception.CustomException;
4240
import io.f1.backend.global.exception.errorcode.QuestionErrorCode;
4341
import io.f1.backend.global.exception.errorcode.RoomErrorCode;
44-
45-
import lombok.RequiredArgsConstructor;
46-
import lombok.extern.slf4j.Slf4j;
47-
48-
import org.springframework.context.ApplicationEventPublisher;
49-
import org.springframework.stereotype.Service;
50-
5142
import java.util.List;
5243
import java.util.Map;
5344
import java.util.Optional;
5445
import java.util.concurrent.ConcurrentHashMap;
5546
import java.util.concurrent.atomic.AtomicLong;
47+
import lombok.RequiredArgsConstructor;
48+
import lombok.extern.slf4j.Slf4j;
49+
import org.springframework.context.ApplicationEventPublisher;
50+
import org.springframework.stereotype.Service;
5651

5752
@Slf4j
5853
@Service
@@ -207,34 +202,38 @@ public RoomListResponse getAllRooms() {
207202
return new RoomListResponse(roomResponses);
208203
}
209204

210-
public RoundResult chatInPlaying(Long roomId, String sessionId, AnswerMessage chatMessage) {
205+
public RoundResult chat(Long roomId, String sessionId, ChatMessage chatMessage) {
211206
Room room = findRoom(roomId);
212207

213208
String destination = getDestination(roomId);
214209

210+
if(!room.isPlaying()) {
211+
return buildResultOnlyChat(destination, chatMessage);
212+
}
213+
214+
Long questionId = room.getCurrentQuestionId();
215+
215216
Question question =
216217
room.getQuestions().stream()
217-
.filter(q -> q.getId().equals(chatMessage.questionId()))
218+
.filter(q -> q.getId().equals(questionId))
218219
.findFirst()
219220
.orElseThrow(
220221
() -> new CustomException(QuestionErrorCode.QUESTION_NOT_FOUND));
221222

222-
ChatMessage broadCastChat = toChatMessage(chatMessage);
223-
224223
String answer = question.getAnswer();
225224

226225
if (!answer.equals(chatMessage.message())) {
227-
return RoundResult.builder().destination(destination).chat(broadCastChat).build();
226+
return buildResultOnlyChat(destination, chatMessage);
228227
}
229228

230229
room.increasePlayerCorrectCount(sessionId);
231230

232231
return RoundResult.builder()
233232
.destination(destination)
234-
.questionResult(toQuestionResultResponse(chatMessage, answer))
233+
.questionResult(toQuestionResultResponse(questionId,chatMessage, answer))
235234
.rankUpdate(toRankUpdateResponse(room))
236235
.systemNotice(ofPlayerEvent(chatMessage.nickname(), RoomEventType.ENTER))
237-
.chat(broadCastChat)
236+
.chat(chatMessage)
238237
.build();
239238
}
240239

@@ -295,4 +294,11 @@ private void removePlayer(Room room, String sessionId, Player removePlayer) {
295294
room.removeUserId(removePlayer.getId());
296295
room.removeSessionId(sessionId);
297296
}
297+
298+
private RoundResult buildResultOnlyChat(String destination, ChatMessage chatMessage) {
299+
return RoundResult.builder()
300+
.destination(destination)
301+
.chat(chatMessage)
302+
.build();
303+
}
298304
}

backend/src/main/java/io/f1/backend/domain/game/dto/RoundResult.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public RoundResult(
2222
RankUpdateResponse rankUpdate,
2323
SystemNoticeResponse systemNotice,
2424
ChatMessage chat) {
25+
this.destination = destination;
2526
this.questionResult = questionResult;
2627
this.rankUpdate = rankUpdate;
2728
this.systemNotice = systemNotice;

backend/src/main/java/io/f1/backend/domain/game/dto/request/AnswerMessage.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import io.f1.backend.domain.game.dto.ChatMessage;
44
import io.f1.backend.domain.game.dto.Rank;
55
import io.f1.backend.domain.game.dto.RoomEventType;
6-
import io.f1.backend.domain.game.dto.request.AnswerMessage;
76
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
87
import io.f1.backend.domain.game.dto.response.GameSettingResponse;
98
import io.f1.backend.domain.game.dto.response.PlayerListResponse;
@@ -30,7 +29,7 @@ public class RoomMapper {
3029

3130
public static RoomSetting toRoomSetting(RoomCreateRequest request) {
3231
return new RoomSetting(
33-
request.roomName(), request.maxUserCount(), request.locked(), request.password());
32+
request.roomName(), request.maxUserCount(), request.locked(), request.password());
3433
}
3534

3635
public static GameSetting toGameSetting(Quiz quiz) {
@@ -39,47 +38,47 @@ public static GameSetting toGameSetting(Quiz quiz) {
3938

4039
public static RoomSettingResponse toRoomSettingResponse(Room room) {
4140
return new RoomSettingResponse(
42-
room.getRoomSetting().roomName(),
43-
room.getRoomSetting().maxUserCount(),
44-
room.getPlayerSessionMap().size());
41+
room.getRoomSetting().roomName(),
42+
room.getRoomSetting().maxUserCount(),
43+
room.getPlayerSessionMap().size());
4544
}
4645

4746
public static GameSettingResponse toGameSettingResponse(GameSetting gameSetting, Quiz quiz) {
4847
return new GameSettingResponse(
49-
gameSetting.getRound(), gameSetting.getTimeLimit(), toQuizResponse(quiz));
48+
gameSetting.getRound(), gameSetting.getTimeLimit(), toQuizResponse(quiz));
5049
}
5150

5251
public static PlayerListResponse toPlayerListResponse(Room room) {
5352
List<PlayerResponse> playerResponseList =
54-
room.getPlayerSessionMap().values().stream()
55-
.map(player -> new PlayerResponse(player.getNickname(), false))
56-
.toList();
53+
room.getPlayerSessionMap().values().stream()
54+
.map(player -> new PlayerResponse(player.getNickname(), false))
55+
.toList();
5756

5857
return new PlayerListResponse(room.getHost().getNickname(), playerResponseList);
5958
}
6059

6160
public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
6261
return new RoomResponse(
63-
room.getId(),
64-
room.getRoomSetting().roomName(),
65-
room.getRoomSetting().maxUserCount(),
66-
room.getPlayerSessionMap().size(),
67-
room.getRoomSetting().locked(),
68-
room.getState().name(),
69-
quiz.getTitle(),
70-
quiz.getDescription(),
71-
quiz.getCreator().getNickname(),
72-
quiz.getQuestions().size(),
73-
quiz.getThumbnailUrl());
62+
room.getId(),
63+
room.getRoomSetting().roomName(),
64+
room.getRoomSetting().maxUserCount(),
65+
room.getPlayerSessionMap().size(),
66+
room.getRoomSetting().locked(),
67+
room.getState().name(),
68+
quiz.getTitle(),
69+
quiz.getDescription(),
70+
quiz.getCreator().getNickname(),
71+
quiz.getQuestions().size(),
72+
quiz.getThumbnailUrl());
7473
}
7574

7675
public static QuizResponse toQuizResponse(Quiz quiz) {
7776
return new QuizResponse(
78-
quiz.getId(),
79-
quiz.getTitle(),
80-
quiz.getDescription(),
81-
quiz.getThumbnailUrl(),
82-
quiz.getQuestions().size());
77+
quiz.getId(),
78+
quiz.getTitle(),
79+
quiz.getDescription(),
80+
quiz.getThumbnailUrl(),
81+
quiz.getQuestions().size());
8382
}
8483

8584
public static SystemNoticeResponse ofPlayerEvent(String nickname, RoomEventType roomEventType) {
@@ -92,21 +91,16 @@ public static SystemNoticeResponse ofPlayerEvent(String nickname, RoomEventType
9291
return new SystemNoticeResponse(nickname + message, Instant.now());
9392
}
9493

95-
public static ChatMessage toChatMessage(AnswerMessage answerMessage) {
96-
return new ChatMessage(
97-
answerMessage.nickname(), answerMessage.message(), answerMessage.timestamp());
98-
}
99-
10094
public static QuestionResultResponse toQuestionResultResponse(
101-
AnswerMessage chatMessage, String answer) {
102-
return new QuestionResultResponse(chatMessage.questionId(), chatMessage.nickname(), answer);
95+
Long questionId, ChatMessage chatMessage, String answer) {
96+
return new QuestionResultResponse(questionId, chatMessage.nickname(), answer);
10397
}
10498

10599
public static RankUpdateResponse toRankUpdateResponse(Room room) {
106100
return new RankUpdateResponse(
107-
room.getPlayerSessionMap().values().stream()
108-
.sorted(Comparator.comparing(Player::getCorrectCount).reversed())
109-
.map(player -> new Rank(player.getNickname(), player.getCorrectCount()))
110-
.toList());
101+
room.getPlayerSessionMap().values().stream()
102+
.sorted(Comparator.comparing(Player::getCorrectCount).reversed())
103+
.map(player -> new Rank(player.getNickname(), player.getCorrectCount()))
104+
.toList());
111105
}
112106
}

backend/src/main/java/io/f1/backend/domain/game/model/Room.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class Room {
3131

3232
private final LocalDateTime createdAt = LocalDateTime.now();
3333

34+
private int currentRound = 0;
35+
3436
public Room(Long id, RoomSetting roomSetting, GameSetting gameSetting, Player host) {
3537
this.id = id;
3638
this.roomSetting = roomSetting;
@@ -61,4 +63,16 @@ public void removeSessionId(String sessionId) {
6163
public void increasePlayerCorrectCount(String sessionId) {
6264
this.playerSessionMap.get(sessionId).increaseCorrectCount();
6365
}
66+
67+
public Long getCurrentQuestionId() {
68+
return questions.get(currentRound-1).getId();
69+
}
70+
71+
public Boolean isPlaying(){
72+
return state == RoomState.PLAYING;
73+
}
74+
75+
public void increaseCorrectCount() {
76+
currentRound++;
77+
}
6478
}

backend/src/main/java/io/f1/backend/domain/game/websocket/GameSocketController.java

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.f1.backend.domain.game.dto.RoomExitData;
99
import io.f1.backend.domain.game.dto.RoomInitialData;
1010
import io.f1.backend.domain.game.dto.RoundResult;
11-
import io.f1.backend.domain.game.dto.request.AnswerMessage;
1211
import io.f1.backend.domain.game.dto.request.DefaultWebSocketRequest;
1312
import io.f1.backend.domain.game.dto.request.GameStartRequest;
1413
import lombok.RequiredArgsConstructor;
@@ -32,17 +31,17 @@ public void initializeRoomSocket(@DestinationVariable Long roomId, Message<?> me
3231
String websocketSessionId = getSessionId(message);
3332

3433
RoomInitialData roomInitialData =
35-
roomService.initializeRoomSocket(roomId, websocketSessionId);
34+
roomService.initializeRoomSocket(roomId, websocketSessionId);
3635
String destination = roomInitialData.destination();
3736

3837
messageSender.send(
39-
destination, MessageType.ROOM_SETTING, roomInitialData.roomSettingResponse());
38+
destination, MessageType.ROOM_SETTING, roomInitialData.roomSettingResponse());
4039
messageSender.send(
41-
destination, MessageType.GAME_SETTING, roomInitialData.gameSettingResponse());
40+
destination, MessageType.GAME_SETTING, roomInitialData.gameSettingResponse());
4241
messageSender.send(
43-
destination, MessageType.PLAYER_LIST, roomInitialData.playerListResponse());
42+
destination, MessageType.PLAYER_LIST, roomInitialData.playerListResponse());
4443
messageSender.send(
45-
destination, MessageType.SYSTEM_NOTICE, roomInitialData.systemNoticeResponse());
44+
destination, MessageType.SYSTEM_NOTICE, roomInitialData.systemNoticeResponse());
4645
}
4746

4847
@MessageMapping("/room/exit/{roomId}")
@@ -56,9 +55,9 @@ public void exitRoom(@DestinationVariable Long roomId, Message<?> message) {
5655

5756
if (!roomExitData.isRemovedRoom()) {
5857
messageSender.send(
59-
destination, MessageType.PLAYER_LIST, roomExitData.getPlayerListResponses());
58+
destination, MessageType.PLAYER_LIST, roomExitData.getPlayerListResponses());
6059
messageSender.send(
61-
destination, MessageType.SYSTEM_NOTICE, roomExitData.getSystemNoticeResponse());
60+
destination, MessageType.SYSTEM_NOTICE, roomExitData.getSystemNoticeResponse());
6261
}
6362
}
6463

@@ -74,27 +73,22 @@ public void gameStart(@DestinationVariable Long roomId, Message<GameStartRequest
7473
messageSender.send(destination, MessageType.GAME_START, gameStartData.gameStartResponse());
7574
}
7675

77-
@MessageMapping("room/chatInWaiting/{roomId}")
78-
public void chatInWaiting(@DestinationVariable Long roomId, Message<DefaultWebSocketRequest<ChatMessage>> message) {
79-
String destination = "/sub/room/" + roomId;
80-
81-
messageSender.send(destination,MessageType.CHAT,message.getPayload());
82-
}
83-
84-
@MessageMapping("room/chatInPlaying/{roomId}")
85-
public void chatInPlaying(@DestinationVariable Long roomId, Message<DefaultWebSocketRequest<AnswerMessage>> message) {
86-
87-
RoundResult roundResult = roomService.chatInPlaying(roomId, getSessionId(message),
76+
@MessageMapping("room/chat/{roomId}")
77+
public void chat(@DestinationVariable Long roomId,
78+
Message<DefaultWebSocketRequest<ChatMessage>> message) {
79+
RoundResult roundResult = roomService.chat(roomId, getSessionId(message),
8880
message.getPayload().getMessage());
8981

9082
String destination = roundResult.getDestination();
9183

92-
messageSender.send(destination,MessageType.CHAT, roundResult.getChat());
84+
messageSender.send(destination, MessageType.CHAT, roundResult.getChat());
9385

94-
if(!roundResult.hasOnlyChat()){
95-
messageSender.send(destination,MessageType.QUESTION_RESULT, roundResult.getQuestionResult());
96-
messageSender.send(destination,MessageType.RANK_UPDATE, roundResult.getRankUpdate());
97-
messageSender.send(destination,MessageType.SYSTEM_NOTICE, roundResult.getSystemNotice());
86+
if (!roundResult.hasOnlyChat()) {
87+
messageSender.send(destination, MessageType.QUESTION_RESULT,
88+
roundResult.getQuestionResult());
89+
messageSender.send(destination, MessageType.RANK_UPDATE, roundResult.getRankUpdate());
90+
messageSender.send(destination, MessageType.SYSTEM_NOTICE,
91+
roundResult.getSystemNotice());
9892
}
9993
}
10094

0 commit comments

Comments
 (0)