Skip to content

Commit daa2013

Browse files
committed
🐛 fix : 게임 시작 API 테스트 및 버그 수정
1 parent 1bec0d7 commit daa2013

File tree

7 files changed

+56
-11
lines changed

7 files changed

+56
-11
lines changed

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
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;
1418
import io.f1.backend.global.exception.errorcode.GameErrorCode;
1519
import io.f1.backend.global.exception.errorcode.RoomErrorCode;
1620

21+
import java.util.List;
1722
import lombok.RequiredArgsConstructor;
1823

24+
import lombok.extern.slf4j.Slf4j;
1925
import org.springframework.context.ApplicationEventPublisher;
2026
import org.springframework.stereotype.Service;
2127

2228
import java.util.Map;
2329

30+
@Slf4j
2431
@Service
2532
@RequiredArgsConstructor
2633
public class GameService {
@@ -29,7 +36,9 @@ public class GameService {
2936
private final RoomRepository roomRepository;
3037
private final ApplicationEventPublisher eventPublisher;
3138

32-
public GameStartData gameStart(Long roomId, Long quizId) {
39+
public GameStartData gameStart(Long roomId, GameStartRequest gameStartRequest) {
40+
41+
Long quizId = gameStartRequest.quizId();
3342

3443
Room room =
3544
roomRepository
@@ -46,14 +55,17 @@ public GameStartData gameStart(Long roomId, Long quizId) {
4655
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
4756

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

5163
// 방 정보 게임 중으로 변경
5264
room.updateRoomState(RoomState.PLAYING);
5365

5466
eventPublisher.publishEvent(new RoomUpdatedEvent(room, quiz));
5567

56-
return new GameStartData(getDestination(roomId), questions);
68+
return new GameStartData(getDestination(roomId), gameStartResponse);
5769
}
5870

5971
private Integer checkGameSetting(Room room, Long quizId) {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.f1.backend.domain.game.dto.request;
2+
3+
import io.f1.backend.domain.game.dto.MessageType;
4+
import io.f1.backend.domain.game.dto.WebSocketDto;
5+
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
public class DefaultWebSocketRequest<T> implements WebSocketDto<T> {
12+
private final MessageType type;
13+
private final T message;
14+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public class GameSetting {
1313

1414
public boolean checkQuizId(Long quizId) {
1515
if (this.quizId != null && this.quizId.equals(quizId)) {
16-
return false;
16+
return true;
1717
}
18-
return true;
18+
return false;
1919
}
2020
}

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
@@ -42,6 +42,10 @@ public boolean isHost(Long id) {
4242
return this.host.getId().equals(id);
4343
}
4444

45+
public void updateQuestions(List<Question> questions) {
46+
this.questions = questions;
47+
}
48+
4549
public void updateHost(Player nextHost) {
4650
this.host = nextHost;
4751
}

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
@@ -6,16 +6,19 @@
66
import io.f1.backend.domain.game.dto.MessageType;
77
import io.f1.backend.domain.game.dto.RoomExitData;
88
import io.f1.backend.domain.game.dto.RoomInitialData;
9+
import io.f1.backend.domain.game.dto.request.DefaultWebSocketRequest;
910
import io.f1.backend.domain.game.dto.request.GameStartRequest;
1011

1112
import lombok.RequiredArgsConstructor;
1213

14+
import lombok.extern.slf4j.Slf4j;
1315
import org.springframework.messaging.Message;
1416
import org.springframework.messaging.handler.annotation.DestinationVariable;
1517
import org.springframework.messaging.handler.annotation.MessageMapping;
1618
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
1719
import org.springframework.stereotype.Controller;
1820

21+
@Slf4j
1922
@Controller
2023
@RequiredArgsConstructor
2124
public class GameSocketController {
@@ -61,11 +64,9 @@ public void exitRoom(@DestinationVariable Long roomId, Message<?> message) {
6164
}
6265

6366
@MessageMapping("/room/start/{roomId}")
64-
public void gameStart(@DestinationVariable Long roomId, Message<GameStartRequest> message) {
67+
public void gameStart(@DestinationVariable Long roomId, Message<DefaultWebSocketRequest<GameStartRequest>> message) {
6568

66-
Long quizId = message.getPayload().quizId();
67-
68-
GameStartData gameStartData = gameService.gameStart(roomId, quizId);
69+
GameStartData gameStartData = gameService.gameStart(roomId, message.getPayload().getMessage());
6970

7071
String destination = gameStartData.destination();
7172

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,13 +252,13 @@ public QuizQuestionListResponse getQuizWithQuestions(Long quizId) {
252252
}
253253

254254
@Transactional(readOnly = true)
255-
public GameStartResponse getRandomQuestionsWithoutAnswer(Long quizId, Integer round) {
255+
public List<Question> getRandomQuestionsWithoutAnswer(Long quizId, Integer round) {
256256
quizRepository
257257
.findById(quizId)
258258
.orElseThrow(() -> new NoSuchElementException("존재하지 않는 퀴즈입니다."));
259259

260260
List<Question> randomQuestions = quizRepository.findRandQuestionsByQuizId(quizId, round);
261261

262-
return toGameStartResponse(randomQuestions);
262+
return randomQuestions;
263263
}
264264
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,16 @@
11
INSERT INTO user (id, nickname, provider, provider_id, last_login)
22
VALUES (1, 'test-user', 'kakao', 'kakao-1234', NOW());
3+
4+
-- INSERT INTO quiz (
5+
-- title,
6+
-- description,
7+
-- quiz_type,
8+
-- thumbnail_url,
9+
-- creator_id
10+
-- ) VALUES (
11+
-- '기본 상식 퀴즈',
12+
-- '일반 상식을 테스트하는 쉬운 퀴즈입니다.',
13+
-- 'TEXT', -- Enum 타입: QuizType에 따라 값 조정
14+
-- 'https://example.com/thumbnail.png',
15+
-- 1
16+
-- );

0 commit comments

Comments
 (0)