diff --git a/src/main/java/com/webgame/webgamebackend/common/dto/game/CreateRoomRequest.java b/src/main/java/com/webgame/webgamebackend/common/dto/game/CreateRoomRequest.java index 701fd70..de6b41e 100644 --- a/src/main/java/com/webgame/webgamebackend/common/dto/game/CreateRoomRequest.java +++ b/src/main/java/com/webgame/webgamebackend/common/dto/game/CreateRoomRequest.java @@ -30,5 +30,16 @@ public record CreateRoomRequest( /** 最大玩家数 */ @NotNull(message = "最大玩家数不能为空") @Positive(message = "最大玩家数必须为正数") - Integer maxPlayers -) {} + Integer maxPlayers, + + /** 是否允许观战,默认 true */ + Boolean allowSpectate +) { + + /** + * 获取观战开关值,未传时默认为 true + */ + public Boolean allowSpectate() { + return allowSpectate != null ? allowSpectate : true; + } +} diff --git a/src/main/java/com/webgame/webgamebackend/common/dto/game/RoomItemResponse.java b/src/main/java/com/webgame/webgamebackend/common/dto/game/RoomItemResponse.java index 9129181..dd18a87 100644 --- a/src/main/java/com/webgame/webgamebackend/common/dto/game/RoomItemResponse.java +++ b/src/main/java/com/webgame/webgamebackend/common/dto/game/RoomItemResponse.java @@ -19,7 +19,8 @@ public record RoomItemResponse( String statusText, int stakes, String mode, - String creatorName + String creatorName, + Boolean allowSpectate ) { /** 状态 → 展示文本映射 */ private static final Map STATUS_TEXT_MAP = Map.of( @@ -53,7 +54,8 @@ public record RoomItemResponse( STATUS_TEXT_MAP.getOrDefault(room.getStatus(), "未知"), room.getStakes(), room.getMode(), - creatorName + creatorName, + room.getAllowSpectate() ); } } diff --git a/src/main/java/com/webgame/webgamebackend/service/impl/GameServiceImpl.java b/src/main/java/com/webgame/webgamebackend/service/impl/GameServiceImpl.java index 11ffe33..b71139e 100644 --- a/src/main/java/com/webgame/webgamebackend/service/impl/GameServiceImpl.java +++ b/src/main/java/com/webgame/webgamebackend/service/impl/GameServiceImpl.java @@ -35,6 +35,7 @@ public class GameServiceImpl implements GameService { private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; private final SseEventPublisher sseEventPublisher; + private final GameMoveRepository gameMoveRepository; @Override public GameListResponse getGameList() { @@ -123,7 +124,8 @@ public class GameServiceImpl implements GameService { .setMode(request.mode()) .setStakes(request.stakes()) .setStatus("waiting") - .setCreatorId(creatorId); + .setCreatorId(creatorId) + .setAllowSpectate(request.allowSpectate()); // 密码加密(如果提供了密码) if (request.password() != null && !request.password().isBlank()) {