Skip to content

Commit be3f034

Browse files
committed
✨ feat: 게임 설정 변경 인터페이스 및 구현체 추가
- GameSettingChanger 인터페이스 도입
1 parent 51d79c6 commit be3f034

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.f1.backend.domain.game.dto;
2+
3+
import io.f1.backend.domain.game.model.Room;
4+
import io.f1.backend.domain.quiz.app.QuizService;
5+
6+
public interface GameSettingChanger {
7+
boolean change(Room room, QuizService quizService);
8+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.f1.backend.domain.game.dto;
2+
3+
import io.f1.backend.domain.game.model.Room;
4+
import io.f1.backend.domain.quiz.app.QuizService;
5+
import io.f1.backend.domain.quiz.entity.Quiz;
6+
import java.util.Objects;
7+
8+
public record QuizChangeRequest(Long quizId) implements GameSettingChanger {
9+
10+
@Override
11+
public boolean change(Room room, QuizService quizService) {
12+
if (Objects.equals(room.getGameSetting().getQuizId(), quizId)) {
13+
return false; // 동일하면 무시
14+
}
15+
Quiz quiz = quizService.getQuizWithQuestionsById(quizId);
16+
int questionSize = quiz.getQuestions().size();
17+
room.getGameSetting().changeQuiz(quiz);
18+
// 퀴즈의 문제 갯수로 변경
19+
room.getGameSetting().changeRound(questionSize, questionSize);
20+
return true;
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.f1.backend.domain.game.dto;
2+
3+
import io.f1.backend.domain.game.model.Room;
4+
import io.f1.backend.domain.quiz.app.QuizService;
5+
import io.f1.backend.domain.quiz.entity.Quiz;
6+
import java.util.Objects;
7+
8+
public record RoundChangeRequest(Integer round) implements GameSettingChanger {
9+
10+
@Override
11+
public boolean change(Room room, QuizService quizService) {
12+
if (Objects.equals(room.getGameSetting().getRound(), round)) {
13+
return false; // 동일하면 무시
14+
}
15+
16+
Quiz quiz = quizService.findQuizById(room.getGameSetting().getQuizId());
17+
int questionSize = quiz.getQuestions().size();
18+
19+
room.getGameSetting().changeRound(round, questionSize);
20+
return true;
21+
}
22+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.f1.backend.domain.game.dto;
2+
3+
import io.f1.backend.global.exception.CustomException;
4+
import io.f1.backend.global.exception.errorcode.GameErrorCode;
5+
import java.util.Arrays;
6+
import lombok.Getter;
7+
8+
@Getter
9+
public enum TimeLimit {
10+
FIFTEEN(15),
11+
THIRTY(30),
12+
FORTY_FIVE(45),
13+
SIXTY(60);
14+
15+
private final int value;
16+
17+
TimeLimit(int value) {
18+
this.value = value;
19+
}
20+
21+
public static TimeLimit from(int value) {
22+
return Arrays.stream(values())
23+
.filter(t -> t.value == value)
24+
.findFirst()
25+
.orElseThrow(() -> new CustomException(GameErrorCode.GAME_SETTING_CONFLICT));
26+
}
27+
28+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.f1.backend.domain.game.dto;
2+
3+
import io.f1.backend.domain.game.model.Room;
4+
import io.f1.backend.domain.quiz.app.QuizService;
5+
6+
public record TimeLimitChangeRequest(int timeLimit) implements GameSettingChanger {
7+
8+
@Override
9+
public boolean change(Room room, QuizService quizService) {
10+
if (room.getGameSetting().getTimeLimit() == timeLimit) {
11+
return false; // 동일하면 무시
12+
}
13+
room.getGameSetting().changeTimeLimit(TimeLimit.from(timeLimit));
14+
return true;
15+
}
16+
}

0 commit comments

Comments
 (0)