Skip to content

Commit 6a34772

Browse files
authored
♻️ refactor: SSE 인원 입퇴장 이벤트 추가 및 SSE 사용 쿼리 분리 (#181)
* ✨ feat: SSE 인원 입퇴장 이벤트 추가 * ♻️ refactor: 불필요 정보 조회 쿼리 변경 - 퀴즈가 문제의 정보까지 fetch join하는 쿼리에서 findQuizById 쿼리로 문제는 Lazy 로딩하도록 변경 * chore: Java 스타일 수정 --------- Co-authored-by: github-actions <>
1 parent d9c79cb commit 6a34772

File tree

9 files changed

+49
-25
lines changed

9 files changed

+49
-25
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,15 @@ public void gameStart(Long roomId, UserPrincipal principal) {
7777
validateRoomStart(room, principal);
7878

7979
Long quizId = room.getGameSetting().getQuizId();
80-
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
80+
Quiz quiz = quizService.findQuizById(quizId);
81+
Long questionsCount = quizService.getQuestionsCount(quizId);
8182
List<Question> questions = prepareQuestions(room, quiz);
8283

8384
room.updateQuestions(questions);
8485
room.increaseCurrentRound();
8586
room.updateRoomState(RoomState.PLAYING);
8687

87-
eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz));
88+
eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz, questionsCount));
8889

8990
timerService.startTimer(room, START_DELAY);
9091

@@ -210,7 +211,8 @@ public void gameEnd(Room room) {
210211
MessageType.GAME_SETTING,
211212
toGameSettingResponse(
212213
room.getGameSetting(),
213-
quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId())));
214+
quizService.findQuizById(room.getGameSetting().getQuizId()),
215+
room.getRound()));
214216
messageSender.sendBroadcast(
215217
destination, MessageType.ROOM_SETTING, toRoomSettingResponse(room));
216218
}
@@ -315,10 +317,11 @@ private void toggleReadyIfPossible(Room room, Player player) {
315317

316318
private void broadcastGameSetting(Room room) {
317319
String destination = getDestination(room.getId());
318-
Quiz quiz = quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId());
320+
Quiz quiz = quizService.findQuizById(room.getGameSetting().getQuizId());
321+
Long questionsCount = quizService.getQuestionsCount(quiz.getId());
319322
messageSender.sendBroadcast(
320323
destination,
321324
MessageType.GAME_SETTING,
322-
toGameSettingResponse(room.getGameSetting(), quiz));
325+
toGameSettingResponse(room.getGameSetting(), quiz, questionsCount));
323326
}
324327
}

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

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.f1.backend.domain.game.dto.response.SystemNoticeResponse;
3030
import io.f1.backend.domain.game.event.RoomCreatedEvent;
3131
import io.f1.backend.domain.game.event.RoomDeletedEvent;
32+
import io.f1.backend.domain.game.event.RoomUpdatedEvent;
3233
import io.f1.backend.domain.game.model.ConnectionState;
3334
import io.f1.backend.domain.game.model.GameSetting;
3435
import io.f1.backend.domain.game.model.Player;
@@ -105,7 +106,7 @@ public RoomCreateResponse saveRoom(RoomCreateRequest request) {
105106
host.getId(),
106107
() -> exitIfInAnotherRoom(room, getCurrentUserPrincipal()));
107108

108-
eventPublisher.publishEvent(new RoomCreatedEvent(room, quiz));
109+
eventPublisher.publishEvent(new RoomCreatedEvent(room, quiz, gameSetting.getRound()));
109110

110111
return new RoomCreateResponse(newId);
111112
}
@@ -204,7 +205,10 @@ public void initializeRoomSocket(Long roomId, UserPrincipal principal) {
204205
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
205206

206207
GameSettingResponse gameSettingResponse =
207-
toGameSettingResponse(room.getGameSetting(), quiz);
208+
toGameSettingResponse(
209+
room.getGameSetting(),
210+
quiz,
211+
quiz.getQuestions().size());
208212

209213
PlayerListResponse playerListResponse = toPlayerListResponse(room);
210214

@@ -229,6 +233,10 @@ public void initializeRoomSocket(Long roomId, UserPrincipal principal) {
229233
destination,
230234
MessageType.SYSTEM_NOTICE,
231235
systemNoticeResponse);
236+
237+
eventPublisher.publishEvent(
238+
new RoomUpdatedEvent(
239+
room, quiz, quiz.getQuestions().size()));
232240
});
233241
});
234242
}
@@ -283,9 +291,9 @@ public RoomListResponse getAllRooms() {
283291
.map(
284292
room -> {
285293
Long quizId = room.getGameSetting().getQuizId();
286-
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
287-
288-
return toRoomResponse(room, quiz);
294+
Quiz quiz = quizService.findQuizById(quizId);
295+
Long questionsCount = quizService.getQuestionsCount(quizId);
296+
return toRoomResponse(room, quiz, questionsCount);
289297
})
290298
.toList();
291299
return new RoomListResponse(roomResponses);
@@ -329,10 +337,11 @@ public void reconnectSendResponse(Long roomId, UserPrincipal principal) {
329337

330338
Long quizId = room.getGameSetting().getQuizId();
331339

332-
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
340+
Quiz quiz = quizService.findQuizById(quizId);
341+
Long questionsCount = quizService.getQuestionsCount(quizId);
333342

334343
GameSettingResponse gameSettingResponse =
335-
toGameSettingResponse(room.getGameSetting(), quiz);
344+
toGameSettingResponse(room.getGameSetting(), quiz, questionsCount);
336345

337346
PlayerListResponse playerListResponse = toPlayerListResponse(room);
338347

@@ -470,6 +479,12 @@ private void cleanRoom(Room room, Player player) {
470479

471480
/* 플레이어 삭제 */
472481
room.removePlayer(player);
482+
483+
Long quizId = room.getQuizId();
484+
Quiz quiz = quizService.findQuizById(quizId);
485+
Long questionsCount = quizService.getQuestionsCount(quizId);
486+
487+
eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz, questionsCount));
473488
}
474489

475490
public void handleDisconnectedPlayers(Room room, List<Player> disconnectedPlayers) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public void afterChange(
4444
RoomUpdatedEvent roomUpdatedEvent =
4545
new RoomUpdatedEvent(
4646
room,
47-
quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()));
47+
quizService.findQuizById(room.getGameSetting().getQuizId()),
48+
room.getGameSetting().getRound());
4849

4950
eventPublisher.publishEvent(roomUpdatedEvent);
5051
}

backend/src/main/java/io/f1/backend/domain/game/event/RoomCreatedEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
import io.f1.backend.domain.game.model.Room;
44
import io.f1.backend.domain.quiz.entity.Quiz;
55

6-
public record RoomCreatedEvent(Room room, Quiz quiz) {}
6+
public record RoomCreatedEvent(Room room, Quiz quiz, long questionSize) {}

backend/src/main/java/io/f1/backend/domain/game/event/RoomUpdatedEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
import io.f1.backend.domain.game.model.Room;
44
import io.f1.backend.domain.quiz.entity.Quiz;
55

6-
public record RoomUpdatedEvent(Room room, Quiz quiz) {}
6+
public record RoomUpdatedEvent(Room room, Quiz quiz, long questionSize) {}

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,12 @@ public static RoomSettingResponse toRoomSettingResponse(Room room) {
5151
room.getRoomSetting().locked());
5252
}
5353

54-
public static GameSettingResponse toGameSettingResponse(GameSetting gameSetting, Quiz quiz) {
54+
public static GameSettingResponse toGameSettingResponse(
55+
GameSetting gameSetting, Quiz quiz, long questionsCount) {
5556
return new GameSettingResponse(
56-
gameSetting.getRound(), gameSetting.getTimeLimit(), toQuizResponse(quiz));
57+
gameSetting.getRound(),
58+
gameSetting.getTimeLimit(),
59+
toQuizResponse(quiz, questionsCount));
5760
}
5861

5962
public static PlayerListResponse toPlayerListResponse(Room room) {
@@ -66,7 +69,7 @@ public static PlayerListResponse toPlayerListResponse(Room room) {
6669
room.getHost().getNickname(), playerResponseList, playerResponseList.size());
6770
}
6871

69-
public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
72+
public static RoomResponse toRoomResponse(Room room, Quiz quiz, long questionsCount) {
7073
return new RoomResponse(
7174
room.getId(),
7275
room.getRoomSetting().roomName(),
@@ -77,17 +80,17 @@ public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
7780
quiz.getTitle(),
7881
quiz.getDescription(),
7982
quiz.getCreator().getNickname(),
80-
quiz.getQuestions().size(),
83+
(int) questionsCount,
8184
quiz.getThumbnailUrl());
8285
}
8386

84-
public static QuizResponse toQuizResponse(Quiz quiz) {
87+
public static QuizResponse toQuizResponse(Quiz quiz, long questionsCount) {
8588
return new QuizResponse(
8689
quiz.getId(),
8790
quiz.getTitle(),
8891
quiz.getDescription(),
8992
quiz.getThumbnailUrl(),
90-
quiz.getQuestions().size());
93+
(int) questionsCount);
9194
}
9295

9396
public static SystemNoticeResponse ofPlayerEvent(String nickname, RoomEventType roomEventType) {

backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomCreatedPayload.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ public record RoomCreatedPayload(
1010
String quizTitle,
1111
String description,
1212
String creator,
13-
int numberOfQuestion,
13+
int numberOfQuestions,
1414
String thumbnailUrl) {}

backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomUpdatedPayload.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ public record RoomUpdatedPayload(
77
String quizTitle,
88
String description,
99
String creator,
10-
int numberOfQuestion,
10+
int numberOfQuestions,
1111
String thumbnailUrl) {}

backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class SseMapper {
1616
public static LobbySseEvent<RoomCreatedPayload> fromRoomCreated(RoomCreatedEvent event) {
1717
Room room = event.room();
1818
Quiz quiz = event.quiz();
19+
long questionSize = event.questionSize();
1920
RoomCreatedPayload payload =
2021
new RoomCreatedPayload(
2122
room.getId(),
@@ -27,14 +28,15 @@ public static LobbySseEvent<RoomCreatedPayload> fromRoomCreated(RoomCreatedEvent
2728
quiz.getTitle(),
2829
quiz.getDescription(),
2930
quiz.getCreator().getNickname(),
30-
quiz.getQuestions().size(),
31+
(int) questionSize,
3132
quiz.getThumbnailUrl());
3233
return new LobbySseEvent<>(SseEventType.CREATE.name(), payload);
3334
}
3435

3536
public static LobbySseEvent<RoomUpdatedPayload> fromRoomUpdated(RoomUpdatedEvent event) {
3637
Room room = event.room();
3738
Quiz quiz = event.quiz();
39+
long questionSize = event.questionSize();
3840
RoomUpdatedPayload payload =
3941
new RoomUpdatedPayload(
4042
room.getId(),
@@ -43,7 +45,7 @@ public static LobbySseEvent<RoomUpdatedPayload> fromRoomUpdated(RoomUpdatedEvent
4345
quiz.getTitle(),
4446
quiz.getDescription(),
4547
quiz.getCreator().getNickname(),
46-
quiz.getQuestions().size(),
48+
(int) questionSize,
4749
quiz.getThumbnailUrl());
4850
return new LobbySseEvent<>(SseEventType.UPDATE.name(), payload);
4951
}

0 commit comments

Comments
 (0)