Newer
Older
PixelPaintWar / apps / server / src / domains / room / application / services / RoomRuntimeResolver.ts
/**
 * RoomRuntimeResolver
 * プレイヤーIDからルームIDとゲームランタイムを解決する
 */
import type {
  FindGameByPlayerPort,
  FindRoomByPlayerPort,
  RoomScopedGamePort,
} from "../ports/roomUseCasePorts";

/** プレイヤー起点で解決したランタイム情報 */
export type RuntimeByPlayerResolution = {
  roomId: string;
  gameManager: RoomScopedGamePort;
};

/** プレイヤーIDからルームIDとゲームランタイムを解決する */
export const resolveRuntimeByPlayerId = (
  roomResolver: FindRoomByPlayerPort,
  runtimeResolver: FindGameByPlayerPort,
  playerId: string
): RuntimeByPlayerResolution | undefined => {
  const roomId = roomResolver.getRoomByPlayerId(playerId)?.roomId;
  const gameManager = runtimeResolver.getGameManagerByPlayerId(playerId);
  if (!roomId || !gameManager) {
    return undefined;
  }

  return {
    roomId,
    gameManager,
  };
};