Skip to content

Commit d7911fe

Browse files
🐛 fix : 게임 시작 API 테스트 및 테스트 중 발견한 버그 수정 (#67)
* 🐛 fix : 게임 시작 API 테스트 및 버그 수정 * chore: Java 스타일 수정 * ♻️ refactor : 단순한 조건문 return문으로 * 🔧 chore : 필요없는 주석문, 어노테이션 삭제 * chore: Java 스타일 수정 * ♻️ refactor : null safe 동등 비교 --------- Co-authored-by: github-actions <>
1 parent 8e37583 commit d7911fe

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package io.f1.backend.domain.game.app;
22

3+
import static io.f1.backend.domain.quiz.mapper.QuizMapper.toGameStartResponse;
4+
35
import io.f1.backend.domain.game.dto.GameStartData;
6+
import io.f1.backend.domain.game.dto.request.GameStartRequest;
47
import io.f1.backend.domain.game.dto.response.GameStartResponse;
58
import io.f1.backend.domain.game.event.RoomUpdatedEvent;
69
import io.f1.backend.domain.game.model.GameSetting;
710
import io.f1.backend.domain.game.model.Player;
811
import io.f1.backend.domain.game.model.Room;
912
import io.f1.backend.domain.game.model.RoomState;
1013
import io.f1.backend.domain.game.store.RoomRepository;
14+
import io.f1.backend.domain.question.entity.Question;
1115
import io.f1.backend.domain.quiz.app.QuizService;
1216
import io.f1.backend.domain.quiz.entity.Quiz;
1317
import io.f1.backend.global.exception.CustomException;
@@ -19,6 +23,7 @@
1923
import org.springframework.context.ApplicationEventPublisher;
2024
import org.springframework.stereotype.Service;
2125

26+
import java.util.List;
2227
import java.util.Map;
2328

2429
@Service
@@ -29,7 +34,9 @@ public class GameService {
2934
private final RoomRepository roomRepository;
3035
private final ApplicationEventPublisher eventPublisher;
3136

32-
public GameStartData gameStart(Long roomId, Long quizId) {
37+
public GameStartData gameStart(Long roomId, GameStartRequest gameStartRequest) {
38+
39+
Long quizId = gameStartRequest.quizId();
3340

3441
Room room =
3542
roomRepository
@@ -46,21 +53,24 @@ public GameStartData gameStart(Long roomId, Long quizId) {
4653
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
4754

4855
// 라운드 수만큼 랜덤 Question 추출
49-
GameStartResponse questions = quizService.getRandomQuestionsWithoutAnswer(quizId, round);
56+
List<Question> questions = quizService.getRandomQuestionsWithoutAnswer(quizId, round);
57+
room.updateQuestions(questions);
58+
59+
GameStartResponse gameStartResponse = toGameStartResponse(questions);
5060

5161
// 방 정보 게임 중으로 변경
5262
room.updateRoomState(RoomState.PLAYING);
5363

5464
eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz));
5565

56-
return new GameStartData(getDestination(roomId), questions);
66+
return new GameStartData(getDestination(roomId), gameStartResponse);
5767
}
5868

5969
private Integer checkGameSetting(Room room, Long quizId) {
6070

6171
GameSetting gameSetting = room.getGameSetting();
6272

63-
if (!gameSetting.checkQuizId(quizId)) {
73+
if (!gameSetting.validateQuizId(quizId)) {
6474
throw new CustomException(GameErrorCode.GAME_SETTING_CONFLICT);
6575
}
6676

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import lombok.AllArgsConstructor;
44
import lombok.Getter;
55

6+
import java.util.Objects;
7+
68
@Getter
79
@AllArgsConstructor
810
public class GameSetting {
@@ -11,10 +13,7 @@ public class GameSetting {
1113
private Integer round; // 게임 변경 시 해당 게임의 총 문제 수로 설정
1214
private int timeLimit = 60;
1315

14-
public boolean checkQuizId(Long quizId) {
15-
if (this.quizId != null && this.quizId.equals(quizId)) {
16-
return false;
17-
}
18-
return true;
16+
public boolean validateQuizId(Long quizId) {
17+
return Objects.equals(this.quizId, quizId);
1918
}
2019
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public boolean isHost(Long id) {
4444
return this.host.getId().equals(id);
4545
}
4646

47+
public void updateQuestions(List<Question> questions) {
48+
this.questions = questions;
49+
}
50+
4751
public void updateHost(Player nextHost) {
4852
this.host = nextHost;
4953
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,12 @@ public void exitRoom(@DestinationVariable Long roomId, Message<?> message) {
7070
}
7171

7272
@MessageMapping("/room/start/{roomId}")
73-
public void gameStart(@DestinationVariable Long roomId, Message<GameStartRequest> message) {
74-
75-
Long quizId = message.getPayload().quizId();
73+
public void gameStart(
74+
@DestinationVariable Long roomId,
75+
Message<DefaultWebSocketRequest<GameStartRequest>> message) {
7676

77-
GameStartData gameStartData = gameService.gameStart(roomId, quizId);
77+
GameStartData gameStartData =
78+
gameService.gameStart(roomId, message.getPayload().getMessage());
7879

7980
String destination = gameStartData.destination();
8081

backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import static java.nio.file.Files.deleteIfExists;
66

7-
import io.f1.backend.domain.game.dto.response.GameStartResponse;
87
import io.f1.backend.domain.question.app.QuestionService;
98
import io.f1.backend.domain.question.dto.QuestionRequest;
109
import io.f1.backend.domain.question.entity.Question;
@@ -252,13 +251,13 @@ public QuizQuestionListResponse getQuizWithQuestions(Long quizId) {
252251
}
253252

254253
@Transactional(readOnly = true)
255-
public GameStartResponse getRandomQuestionsWithoutAnswer(Long quizId, Integer round) {
254+
public List<Question> getRandomQuestionsWithoutAnswer(Long quizId, Integer round) {
256255
quizRepository
257256
.findById(quizId)
258257
.orElseThrow(() -> new NoSuchElementException("존재하지 않는 퀴즈입니다."));
259258

260259
List<Question> randomQuestions = quizRepository.findRandQuestionsByQuizId(quizId, round);
261260

262-
return toGameStartResponse(randomQuestions);
261+
return randomQuestions;
263262
}
264263
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
INSERT INTO user (id, nickname, provider, provider_id, last_login)
2-
VALUES (1, 'test-user', 'kakao', 'kakao-1234', NOW());
2+
VALUES (1, 'test-user', 'kakao', 'kakao-1234', NOW());

0 commit comments

Comments
 (0)