diff --git a/apps/client/src/app.tsx b/apps/client/src/app.tsx index 37a01a3..8b37e31 100644 --- a/apps/client/src/app.tsx +++ b/apps/client/src/app.tsx @@ -8,7 +8,7 @@ import { ResultScene } from "./scenes/result/ResultScene"; import { LandscapeOnlyGate } from "./components/LandscapeOnlyGate"; -import { appConsts } from "@repo/shared"; +import { domain } from "@repo/shared"; export default function App() { const { @@ -25,7 +25,7 @@ let scene = ; // タイトル画面分岐 - if (scenePhase === appConsts.ScenePhase.TITLE) { + if (scenePhase === domain.app.ScenePhase.TITLE) { scene = ( void; + requestJoin: (payload: domain.room.JoinRoomPayload) => void; returnToTitle: (options?: { leaveRoom?: boolean }) => void; }; @@ -28,7 +28,7 @@ }; type JoinFailureReason = - | roomTypes.JoinRoomRejectedPayload["reason"] + | domain.room.JoinRoomRejectedPayload["reason"] | "timeout"; type JoinFailure = { @@ -65,16 +65,16 @@ /** アプリ全体のシーン状態と参加要求フローを管理するフック */ export const useAppFlow = (): AppFlowState => { - const [scenePhase, setScenePhase] = useState( - appConsts.ScenePhase.TITLE, + const [scenePhase, setScenePhase] = useState( + domain.app.ScenePhase.TITLE, ); - const [room, setRoom] = useState(null); + const [room, setRoom] = useState(null); const [myId, setMyId] = useState(null); const [gameResult, setGameResult] = useState(null); const [joinState, dispatchJoin] = useReducer(joinReducer, initialJoinState); const joinTimeoutRef = useRef | null>(null); const joinRejectedHandlerRef = useRef< - ((payload: roomTypes.JoinRoomRejectedPayload) => void) | null + ((payload: domain.room.JoinRoomRejectedPayload) => void) | null >(null); const clearJoinRejectedHandler = useCallback(() => { @@ -128,7 +128,7 @@ ); const requestJoin = useCallback( - (payload: roomTypes.JoinRoomPayload) => { + (payload: domain.room.JoinRoomPayload) => { if (joinState.isJoining) { return; } @@ -137,7 +137,7 @@ dispatchJoin({ type: "start" }); const handleJoinRejected = ( - payload: roomTypes.JoinRoomRejectedPayload, + payload: domain.room.JoinRoomRejectedPayload, ) => { completeJoinRequest({ reason: payload.reason, @@ -162,7 +162,7 @@ completeJoinRequest(); setRoom(null); setGameResult(null); - setScenePhase(appConsts.ScenePhase.TITLE); + setScenePhase(domain.app.ScenePhase.TITLE); if (!options?.leaveRoom) { return; diff --git a/apps/client/src/hooks/useSocketSubscriptions.ts b/apps/client/src/hooks/useSocketSubscriptions.ts index 33f2df7..19a2ef8 100644 --- a/apps/client/src/hooks/useSocketSubscriptions.ts +++ b/apps/client/src/hooks/useSocketSubscriptions.ts @@ -5,20 +5,20 @@ */ import { useEffect } from "react"; import { socketManager } from "@client/network/SocketManager"; -import { appConsts } from "@repo/shared"; -import type { appTypes, roomTypes, GameResultPayload } from "@repo/shared"; +import { domain } from "@repo/shared"; +import type { GameResultPayload } from "@repo/shared"; type UseSocketSubscriptionsParams = { completeJoinRequest: () => void; setGameResult: (payload: GameResultPayload | null) => void; setMyId: (id: string | null) => void; - setRoom: (room: roomTypes.Room | null) => void; - setScenePhase: (phase: appTypes.ScenePhase) => void; + setRoom: (room: domain.room.Room | null) => void; + setScenePhase: (phase: domain.app.ScenePhaseType) => void; }; type AppSocketHandlers = { handleConnect: (id: string) => void; - handleRoomUpdate: (updatedRoom: roomTypes.Room) => void; + handleRoomUpdate: (updatedRoom: domain.room.Room) => void; handleGameStart: () => void; handleGameResult: (payload: GameResultPayload) => void; }; @@ -77,20 +77,20 @@ setMyId(id); }, - handleRoomUpdate: (updatedRoom: roomTypes.Room) => { + handleRoomUpdate: (updatedRoom: domain.room.Room) => { completeJoinRequest(); setRoom(updatedRoom); - setScenePhase(appConsts.ScenePhase.LOBBY); + setScenePhase(domain.app.ScenePhase.LOBBY); }, handleGameStart: () => { setGameResult(null); - setScenePhase(appConsts.ScenePhase.PLAYING); + setScenePhase(domain.app.ScenePhase.PLAYING); }, handleGameResult: (payload: GameResultPayload) => { setGameResult(payload); - setScenePhase(appConsts.ScenePhase.RESULT); + setScenePhase(domain.app.ScenePhase.RESULT); }, }; diff --git a/apps/server/src/domains/room/application/services/RoomJoinService.ts b/apps/server/src/domains/room/application/services/RoomJoinService.ts index dfaf7b8..8b72619 100644 --- a/apps/server/src/domains/room/application/services/RoomJoinService.ts +++ b/apps/server/src/domains/room/application/services/RoomJoinService.ts @@ -2,16 +2,15 @@ * RoomJoinService * ルーム作成とプレイヤー参加処理を担うサービス */ -import { roomConsts } from "@repo/shared"; +import { domain } from "@repo/shared"; import { config } from "@server/config"; -import type { roomTypes } from "@repo/shared"; import { logEvent } from "@server/logging/logger"; import { logResults, logScopes, roomDomainLogEvents } from "@server/logging/index"; import type { JoinRoomResult } from "../ports/roomUseCasePorts"; /** 参加要求に応じてルーム作成と参加者追加を行うサービス */ export class RoomJoinService { - constructor(private rooms: Map) {} + constructor(private rooms: Map) {} public addPlayerToRoom(roomId: string, socketId: string, playerName: string): JoinRoomResult { let room = this.rooms.get(roomId); @@ -20,7 +19,7 @@ roomId, ownerId: socketId, players: [], - status: roomConsts.RoomPhase.WAITING, + status: domain.room.RoomPhase.WAITING, maxPlayers: config.GAME_CONFIG.MAX_PLAYERS_PER_ROOM, }; this.rooms.set(roomId, room); @@ -59,7 +58,7 @@ return { room, status: "full" }; } - const newPlayer: roomTypes.RoomMember = { + const newPlayer: domain.room.RoomMember = { id: socketId, name: playerName, isOwner: room.ownerId === socketId, diff --git a/apps/server/src/domains/room/application/services/RoomPhaseService.ts b/apps/server/src/domains/room/application/services/RoomPhaseService.ts index b79a237..3ee0466 100644 --- a/apps/server/src/domains/room/application/services/RoomPhaseService.ts +++ b/apps/server/src/domains/room/application/services/RoomPhaseService.ts @@ -2,13 +2,12 @@ * RoomPhaseService * ルーム状態のフェーズ更新処理を提供する */ -import { roomConsts } from "@repo/shared"; -import type { roomTypes } from "@repo/shared"; +import { domain } from "@repo/shared"; import type { RoomPhaseTransitionResult } from "../ports/roomUseCasePorts"; /** ルーム状態のフェーズ遷移を管理するサービス */ export class RoomPhaseService { - constructor(private rooms: Map) {} + constructor(private rooms: Map) {} public markRoomPlaying(roomId: string): RoomPhaseTransitionResult { const room = this.rooms.get(roomId); @@ -16,14 +15,14 @@ return { status: "not_found" }; } - if (room.status === roomConsts.RoomPhase.PLAYING) { + if (room.status === domain.room.RoomPhase.PLAYING) { return { status: "invalid_transition", room, }; } - room.status = roomConsts.RoomPhase.PLAYING; + room.status = domain.room.RoomPhase.PLAYING; return { status: "updated", room, @@ -36,14 +35,14 @@ return { status: "not_found" }; } - if (room.status === roomConsts.RoomPhase.WAITING) { + if (room.status === domain.room.RoomPhase.WAITING) { return { status: "invalid_transition", room, }; } - room.status = roomConsts.RoomPhase.WAITING; + room.status = domain.room.RoomPhase.WAITING; return { status: "updated", room,