Skip to content

Commit 3e439f9

Browse files
silver-eunjoodlsrks1021
authored andcommitted
✨ feat: 랭킹 업데이트 연결
1 parent 732a651 commit 3e439f9

File tree

4 files changed

+41
-7
lines changed

4 files changed

+41
-7
lines changed

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

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
import io.f1.backend.domain.game.dto.MessageType;
1616
import io.f1.backend.domain.game.dto.RoomEventType;
1717
import io.f1.backend.domain.game.dto.request.GameSettingChanger;
18+
import io.f1.backend.domain.game.dto.response.GameResultListResponse;
19+
import io.f1.backend.domain.game.dto.response.GameResultResponse;
1820
import io.f1.backend.domain.game.event.GameCorrectAnswerEvent;
1921
import io.f1.backend.domain.game.event.GameTimeoutEvent;
2022
import io.f1.backend.domain.game.event.RoomUpdatedEvent;
23+
import io.f1.backend.domain.game.model.ConnectionState;
2124
import io.f1.backend.domain.game.model.Player;
2225
import io.f1.backend.domain.game.model.Room;
2326
import io.f1.backend.domain.game.model.RoomState;
@@ -26,6 +29,7 @@
2629
import io.f1.backend.domain.question.entity.Question;
2730
import io.f1.backend.domain.quiz.app.QuizService;
2831
import io.f1.backend.domain.quiz.entity.Quiz;
32+
import io.f1.backend.domain.stat.app.StatService;
2933
import io.f1.backend.domain.user.dto.UserPrincipal;
3034
import io.f1.backend.global.exception.CustomException;
3135
import io.f1.backend.global.exception.errorcode.GameErrorCode;
@@ -52,6 +56,7 @@ public class GameService {
5256
private static final int CONTINUE_DELAY = 3;
5357
private static final String NONE_CORRECT_USER = "";
5458

59+
private final StatService statService;
5560
private final QuizService quizService;
5661
private final RoomService roomService;
5762
private final TimerService timerService;
@@ -171,10 +176,15 @@ public void gameEnd(Room room) {
171176
Map<Long, Player> playerMap = room.getPlayerMap();
172177

173178
// TODO : 랭킹 정보 업데이트
179+
GameResultListResponse gameResultListResponse = toGameResultListResponse(playerMap,
180+
room.getGameSetting().getRound());
181+
174182
messageSender.sendBroadcast(
175183
destination,
176-
MessageType.GAME_RESULT,
177-
toGameResultListResponse(playerMap, room.getGameSetting().getRound()));
184+
MessageType.GAME_RESULT,gameResultListResponse
185+
);
186+
187+
updateRank(room, gameResultListResponse);
178188

179189
room.initializeRound();
180190
room.initializePlayers();
@@ -200,6 +210,32 @@ public void gameEnd(Room room) {
200210
destination, MessageType.ROOM_SETTING, toRoomSettingResponse(room));
201211
}
202212

213+
private void updateRank(Room room, GameResultListResponse gameResultListResponse) {
214+
215+
List<GameResultResponse> result = gameResultListResponse.result();
216+
217+
for(GameResultResponse gameResultResponse : result) {
218+
Long playerId = gameResultResponse.id();
219+
int rank = gameResultResponse.rank();
220+
int score = gameResultResponse.score();
221+
222+
Player player = room.getPlayerByUserId(playerId);
223+
224+
if (Objects.equals(player.getState(), ConnectionState.DISCONNECTED)) {
225+
statService.updateRank(playerId, false, 0);
226+
continue;
227+
}
228+
229+
if(rank == 1) {
230+
statService.updateRank(playerId, true, score);
231+
continue;
232+
}
233+
234+
statService.updateRank(playerId, false, score);
235+
236+
}
237+
}
238+
203239
@DistributedLock(prefix = "room", key = "#roomId")
204240
public void handlePlayerReady(Long roomId, UserPrincipal userPrincipal) {
205241

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package io.f1.backend.domain.game.dto.response;
22

3-
public record GameResultResponse(String nickname, int score, int totalCorrectCount, int rank) {}
3+
public record GameResultResponse(Long id, String nickname, int score, int totalCorrectCount, int rank) {}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static GameResultResponse toGameResultResponse(
121121
double correctRate = (double) player.getCorrectCount() / round;
122122
int score = (int) (correctRate * 100) + (totalPlayers - rank) * 5;
123123

124-
return new GameResultResponse(player.nickname, score, player.getCorrectCount(), rank);
124+
return new GameResultResponse(player.id, player.nickname, score, player.getCorrectCount(), rank);
125125
}
126126

127127
public static GameResultListResponse toGameResultListResponse(

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,7 @@ public void initializePlayers() {
121121
this.playerMap
122122
.values()
123123
.forEach(
124-
player -> {
125-
player.initializeCorrectCount();
126-
});
124+
Player::initializeCorrectCount);
127125
resetAllPlayerReadyStates();
128126
}
129127

0 commit comments

Comments
 (0)