Newer
Older
PixelPaintWar / apps / server / src / domains / room / application / services / RoomQueryService.ts
/**
 * RoomQueryService
 * ルーム状態の参照系クエリを提供するサービス
 */
import type { domain } from "@repo/shared";

/** ルームの参照クエリを提供するサービス */
export class RoomQueryService {
  constructor(private rooms: Map<string, domain.room.Room>) {}

  public getRoomById(roomId: string): domain.room.Room | undefined {
    return this.rooms.get(roomId);
  }

  public getRoomByPlayerId(playerId: string): domain.room.Room | undefined {
    for (const room of this.rooms.values()) {
      if (room.players.some((player) => player.id === playerId)) {
        return room;
      }
    }

    return undefined;
  }

  public getRoomByOwnerId(ownerId: string): domain.room.Room | undefined {
    for (const room of this.rooms.values()) {
      if (room.ownerId === ownerId) {
        return room;
      }
    }

    return undefined;
  }
}