diff --git a/apps/server/src/application/coordinators/coordinatorDeps.ts b/apps/server/src/application/coordinators/coordinatorDeps.ts index d222a64..11cede5 100644 --- a/apps/server/src/application/coordinators/coordinatorDeps.ts +++ b/apps/server/src/application/coordinators/coordinatorDeps.ts @@ -4,6 +4,7 @@ */ import type { CleanupGameRuntimePort, + DeleteRoomPort, DisconnectRoomPort, FindGameByRoomPort, FindRoomByIdPort, @@ -14,8 +15,8 @@ /** START_GAME調停で利用する依存集合 */ export type StartGameCoordinatorDeps = { - roomManager: FindRoomByOwnerPort & RoomPhaseTransitionPort; - runtimeRegistry: FindGameByRoomPort; + roomManager: FindRoomByOwnerPort & RoomPhaseTransitionPort & DeleteRoomPort; + runtimeRegistry: FindGameByRoomPort & CleanupGameRuntimePort; }; /** READY_FOR_GAME調停で利用する依存集合 */ diff --git a/apps/server/src/application/coordinators/startGameCoordinator.ts b/apps/server/src/application/coordinators/startGameCoordinator.ts index 4f0304c..72407a7 100644 --- a/apps/server/src/application/coordinators/startGameCoordinator.ts +++ b/apps/server/src/application/coordinators/startGameCoordinator.ts @@ -106,7 +106,8 @@ gameSession: gameManager, bombStore: gameManager, onGameEnd: () => { - roomManager.markRoomResult(updatedRoom.roomId); + roomManager.deleteRoom(updatedRoom.roomId); + runtimeRegistry.cleanupGameManagerForRoom(updatedRoom.roomId); }, output, }); diff --git a/apps/server/src/domains/room/RoomManager.ts b/apps/server/src/domains/room/RoomManager.ts index bacbff0..67b532c 100644 --- a/apps/server/src/domains/room/RoomManager.ts +++ b/apps/server/src/domains/room/RoomManager.ts @@ -58,13 +58,13 @@ return this.roomPhaseService.markRoomPlaying(roomId); } - // ルーム状態をRESULTへ更新する - public markRoomResult(roomId: string): RoomPhaseTransitionResult { - return this.roomPhaseService.markRoomResult(roomId); - } - // ルーム状態をWAITINGへ更新する public markRoomWaiting(roomId: string): RoomPhaseTransitionResult { return this.roomPhaseService.markRoomWaiting(roomId); } + + // ルームを削除する + public deleteRoom(roomId: string): boolean { + return this.rooms.delete(roomId); + } } \ No newline at end of file diff --git a/apps/server/src/domains/room/application/ports/roomUseCasePorts.ts b/apps/server/src/domains/room/application/ports/roomUseCasePorts.ts index 14d52ce..e0cbd1e 100644 --- a/apps/server/src/domains/room/application/ports/roomUseCasePorts.ts +++ b/apps/server/src/domains/room/application/ports/roomUseCasePorts.ts @@ -64,7 +64,6 @@ /** ゲーム開始調停で利用するルーム状態遷移ポート */ export interface RoomPhaseTransitionPort { markRoomPlaying(roomId: string): RoomPhaseTransitionResult; - markRoomResult(roomId: string): RoomPhaseTransitionResult; markRoomWaiting(roomId: string): RoomPhaseTransitionResult; } @@ -79,6 +78,11 @@ getRoomById(roomId: string): domain.room.Room | undefined; } +/** ゲーム終了時にルームを削除する操作ポート */ +export interface DeleteRoomPort { + deleteRoom(roomId: string): boolean; +} + /** ルーム参加後にゲームランタイムを確保する操作ポート */ export interface EnsureGameRuntimePort { ensureGameManagerForRoom(roomId: string): void; diff --git a/apps/server/src/domains/room/application/services/RoomPhaseService.ts b/apps/server/src/domains/room/application/services/RoomPhaseService.ts index f28de2f..3ee0466 100644 --- a/apps/server/src/domains/room/application/services/RoomPhaseService.ts +++ b/apps/server/src/domains/room/application/services/RoomPhaseService.ts @@ -29,26 +29,6 @@ }; } - public markRoomResult(roomId: string): RoomPhaseTransitionResult { - const room = this.rooms.get(roomId); - if (!room) { - return { status: "not_found" }; - } - - if (room.status !== domain.room.RoomPhase.PLAYING) { - return { - status: "invalid_transition", - room, - }; - } - - room.status = domain.room.RoomPhase.RESULT; - return { - status: "updated", - room, - }; - } - public markRoomWaiting(roomId: string): RoomPhaseTransitionResult { const room = this.rooms.get(roomId); if (!room) { diff --git a/apps/server/src/network/types/connectionPorts.ts b/apps/server/src/network/types/connectionPorts.ts index c96e091..b025c7b 100644 --- a/apps/server/src/network/types/connectionPorts.ts +++ b/apps/server/src/network/types/connectionPorts.ts @@ -35,7 +35,7 @@ /** ゲームイベント調停で利用するルーム依存ポート */ export type GameEventRoomUseCasePort = Pick< ConnectionRoomPort, - "getRoomByOwnerId" | "getRoomByPlayerId" | "markRoomPlaying" | "markRoomResult" | "markRoomWaiting" + "getRoomByOwnerId" | "getRoomByPlayerId" | "markRoomPlaying" | "markRoomWaiting" >; /** ゲームイベント調停で利用するランタイム依存ポート */