diff --git a/backend/src/main/java/io/f1/backend/domain/game/app/GameService.java b/backend/src/main/java/io/f1/backend/domain/game/app/GameService.java index cf0e72e9..505b90cd 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/app/GameService.java +++ b/backend/src/main/java/io/f1/backend/domain/game/app/GameService.java @@ -77,14 +77,15 @@ public void gameStart(Long roomId, UserPrincipal principal) { validateRoomStart(room, principal); Long quizId = room.getGameSetting().getQuizId(); - Quiz quiz = quizService.getQuizWithQuestionsById(quizId); + Quiz quiz = quizService.findQuizById(quizId); + Long questionsCount = quizService.getQuestionsCount(quizId); List questions = prepareQuestions(room, quiz); room.updateQuestions(questions); room.increaseCurrentRound(); room.updateRoomState(RoomState.PLAYING); - eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz)); + eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz, questionsCount)); timerService.startTimer(room, START_DELAY); @@ -210,7 +211,8 @@ public void gameEnd(Room room) { MessageType.GAME_SETTING, toGameSettingResponse( room.getGameSetting(), - quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()))); + quizService.findQuizById(room.getGameSetting().getQuizId()), + room.getRound())); messageSender.sendBroadcast( destination, MessageType.ROOM_SETTING, toRoomSettingResponse(room)); } @@ -315,10 +317,11 @@ private void toggleReadyIfPossible(Room room, Player player) { private void broadcastGameSetting(Room room) { String destination = getDestination(room.getId()); - Quiz quiz = quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()); + Quiz quiz = quizService.findQuizById(room.getGameSetting().getQuizId()); + Long questionsCount = quizService.getQuestionsCount(quiz.getId()); messageSender.sendBroadcast( destination, MessageType.GAME_SETTING, - toGameSettingResponse(room.getGameSetting(), quiz)); + toGameSettingResponse(room.getGameSetting(), quiz, questionsCount)); } } diff --git a/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java b/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java index 7eebd4b7..239851d1 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java +++ b/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java @@ -29,6 +29,7 @@ import io.f1.backend.domain.game.dto.response.SystemNoticeResponse; import io.f1.backend.domain.game.event.RoomCreatedEvent; import io.f1.backend.domain.game.event.RoomDeletedEvent; +import io.f1.backend.domain.game.event.RoomUpdatedEvent; import io.f1.backend.domain.game.model.ConnectionState; import io.f1.backend.domain.game.model.GameSetting; import io.f1.backend.domain.game.model.Player; @@ -105,7 +106,7 @@ public RoomCreateResponse saveRoom(RoomCreateRequest request) { host.getId(), () -> exitIfInAnotherRoom(room, getCurrentUserPrincipal())); - eventPublisher.publishEvent(new RoomCreatedEvent(room, quiz)); + eventPublisher.publishEvent(new RoomCreatedEvent(room, quiz, gameSetting.getRound())); return new RoomCreateResponse(newId); } @@ -204,7 +205,10 @@ public void initializeRoomSocket(Long roomId, UserPrincipal principal) { Quiz quiz = quizService.getQuizWithQuestionsById(quizId); GameSettingResponse gameSettingResponse = - toGameSettingResponse(room.getGameSetting(), quiz); + toGameSettingResponse( + room.getGameSetting(), + quiz, + quiz.getQuestions().size()); PlayerListResponse playerListResponse = toPlayerListResponse(room); @@ -229,6 +233,10 @@ public void initializeRoomSocket(Long roomId, UserPrincipal principal) { destination, MessageType.SYSTEM_NOTICE, systemNoticeResponse); + + eventPublisher.publishEvent( + new RoomUpdatedEvent( + room, quiz, quiz.getQuestions().size())); }); }); } @@ -283,9 +291,9 @@ public RoomListResponse getAllRooms() { .map( room -> { Long quizId = room.getGameSetting().getQuizId(); - Quiz quiz = quizService.getQuizWithQuestionsById(quizId); - - return toRoomResponse(room, quiz); + Quiz quiz = quizService.findQuizById(quizId); + Long questionsCount = quizService.getQuestionsCount(quizId); + return toRoomResponse(room, quiz, questionsCount); }) .toList(); return new RoomListResponse(roomResponses); @@ -329,10 +337,11 @@ public void reconnectSendResponse(Long roomId, UserPrincipal principal) { Long quizId = room.getGameSetting().getQuizId(); - Quiz quiz = quizService.getQuizWithQuestionsById(quizId); + Quiz quiz = quizService.findQuizById(quizId); + Long questionsCount = quizService.getQuestionsCount(quizId); GameSettingResponse gameSettingResponse = - toGameSettingResponse(room.getGameSetting(), quiz); + toGameSettingResponse(room.getGameSetting(), quiz, questionsCount); PlayerListResponse playerListResponse = toPlayerListResponse(room); @@ -470,6 +479,12 @@ private void cleanRoom(Room room, Player player) { /* 플레이어 삭제 */ room.removePlayer(player); + + Long quizId = room.getQuizId(); + Quiz quiz = quizService.findQuizById(quizId); + Long questionsCount = quizService.getQuestionsCount(quizId); + + eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz, questionsCount)); } public void handleDisconnectedPlayers(Room room, List disconnectedPlayers) { diff --git a/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java b/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java index cfb4e5f9..530967d7 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java +++ b/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java @@ -44,7 +44,8 @@ public void afterChange( RoomUpdatedEvent roomUpdatedEvent = new RoomUpdatedEvent( room, - quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId())); + quizService.findQuizById(room.getGameSetting().getQuizId()), + room.getGameSetting().getRound()); eventPublisher.publishEvent(roomUpdatedEvent); } diff --git a/backend/src/main/java/io/f1/backend/domain/game/event/RoomCreatedEvent.java b/backend/src/main/java/io/f1/backend/domain/game/event/RoomCreatedEvent.java index 545ae3e1..4c24d1e3 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/event/RoomCreatedEvent.java +++ b/backend/src/main/java/io/f1/backend/domain/game/event/RoomCreatedEvent.java @@ -3,4 +3,4 @@ import io.f1.backend.domain.game.model.Room; import io.f1.backend.domain.quiz.entity.Quiz; -public record RoomCreatedEvent(Room room, Quiz quiz) {} +public record RoomCreatedEvent(Room room, Quiz quiz, long questionSize) {} diff --git a/backend/src/main/java/io/f1/backend/domain/game/event/RoomUpdatedEvent.java b/backend/src/main/java/io/f1/backend/domain/game/event/RoomUpdatedEvent.java index 204a21d8..a972d275 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/event/RoomUpdatedEvent.java +++ b/backend/src/main/java/io/f1/backend/domain/game/event/RoomUpdatedEvent.java @@ -3,4 +3,4 @@ import io.f1.backend.domain.game.model.Room; import io.f1.backend.domain.quiz.entity.Quiz; -public record RoomUpdatedEvent(Room room, Quiz quiz) {} +public record RoomUpdatedEvent(Room room, Quiz quiz, long questionSize) {} diff --git a/backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java b/backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java index 86015874..211b693c 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java +++ b/backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java @@ -51,9 +51,12 @@ public static RoomSettingResponse toRoomSettingResponse(Room room) { room.getRoomSetting().locked()); } - public static GameSettingResponse toGameSettingResponse(GameSetting gameSetting, Quiz quiz) { + public static GameSettingResponse toGameSettingResponse( + GameSetting gameSetting, Quiz quiz, long questionsCount) { return new GameSettingResponse( - gameSetting.getRound(), gameSetting.getTimeLimit(), toQuizResponse(quiz)); + gameSetting.getRound(), + gameSetting.getTimeLimit(), + toQuizResponse(quiz, questionsCount)); } public static PlayerListResponse toPlayerListResponse(Room room) { @@ -66,7 +69,7 @@ public static PlayerListResponse toPlayerListResponse(Room room) { room.getHost().getNickname(), playerResponseList, playerResponseList.size()); } - public static RoomResponse toRoomResponse(Room room, Quiz quiz) { + public static RoomResponse toRoomResponse(Room room, Quiz quiz, long questionsCount) { return new RoomResponse( room.getId(), room.getRoomSetting().roomName(), @@ -77,17 +80,17 @@ public static RoomResponse toRoomResponse(Room room, Quiz quiz) { quiz.getTitle(), quiz.getDescription(), quiz.getCreator().getNickname(), - quiz.getQuestions().size(), + (int) questionsCount, quiz.getThumbnailUrl()); } - public static QuizResponse toQuizResponse(Quiz quiz) { + public static QuizResponse toQuizResponse(Quiz quiz, long questionsCount) { return new QuizResponse( quiz.getId(), quiz.getTitle(), quiz.getDescription(), quiz.getThumbnailUrl(), - quiz.getQuestions().size()); + (int) questionsCount); } public static SystemNoticeResponse ofPlayerEvent(String nickname, RoomEventType roomEventType) { diff --git a/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomCreatedPayload.java b/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomCreatedPayload.java index 08c7e4fd..d647a314 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomCreatedPayload.java +++ b/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomCreatedPayload.java @@ -10,5 +10,5 @@ public record RoomCreatedPayload( String quizTitle, String description, String creator, - int numberOfQuestion, + int numberOfQuestions, String thumbnailUrl) {} diff --git a/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomUpdatedPayload.java b/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomUpdatedPayload.java index 54df4128..206cfd2a 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomUpdatedPayload.java +++ b/backend/src/main/java/io/f1/backend/domain/game/sse/dto/RoomUpdatedPayload.java @@ -7,5 +7,5 @@ public record RoomUpdatedPayload( String quizTitle, String description, String creator, - int numberOfQuestion, + int numberOfQuestions, String thumbnailUrl) {} diff --git a/backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java b/backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java index 869e0219..0ba4e91a 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java +++ b/backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java @@ -16,6 +16,7 @@ public class SseMapper { public static LobbySseEvent fromRoomCreated(RoomCreatedEvent event) { Room room = event.room(); Quiz quiz = event.quiz(); + long questionSize = event.questionSize(); RoomCreatedPayload payload = new RoomCreatedPayload( room.getId(), @@ -27,7 +28,7 @@ public static LobbySseEvent fromRoomCreated(RoomCreatedEvent quiz.getTitle(), quiz.getDescription(), quiz.getCreator().getNickname(), - quiz.getQuestions().size(), + (int) questionSize, quiz.getThumbnailUrl()); return new LobbySseEvent<>(SseEventType.CREATE.name(), payload); } @@ -35,6 +36,7 @@ public static LobbySseEvent fromRoomCreated(RoomCreatedEvent public static LobbySseEvent fromRoomUpdated(RoomUpdatedEvent event) { Room room = event.room(); Quiz quiz = event.quiz(); + long questionSize = event.questionSize(); RoomUpdatedPayload payload = new RoomUpdatedPayload( room.getId(), @@ -43,7 +45,7 @@ public static LobbySseEvent fromRoomUpdated(RoomUpdatedEvent quiz.getTitle(), quiz.getDescription(), quiz.getCreator().getNickname(), - quiz.getQuestions().size(), + (int) questionSize, quiz.getThumbnailUrl()); return new LobbySseEvent<>(SseEventType.UPDATE.name(), payload); }