Parent Epic
선행 작업
Story 개요
현재 GameModePanel.jsx에 혼합된 채팅/게임 UI를 각 도메인별 컴포넌트로 분리합니다.
재사용성과 테스트 용이성을 개선합니다.
현재 구조
```
src/domains/freetalk/components/
├── GameModePanel.jsx (채팅 + 게임 + 캔버스 혼합, 700줄+)
├── ChatInput.jsx
├── ChatRoomModal.jsx
└── DrawingCanvas.jsx
```
변경 후 구조
```
src/domains/chat/components/
├── ChatRoom.jsx (채팅방 컨테이너)
├── ChatMessages.jsx (메시지 목록)
├── ChatInput.jsx (입력창)
└── ChatBubble.jsx (메시지 버블)
src/domains/catchmind/components/
├── CatchmindGame.jsx (게임 컨테이너)
├── DrawingCanvas.jsx (그리기 캔버스)
├── DrawingTools.jsx (그리기 도구)
├── GuessInput.jsx (정답 입력)
├── ScoreBoard.jsx (점수판)
├── Timer.jsx (타이머 표시)
├── WordDisplay.jsx (단어 표시 - 출제자용)
└── GuessBubbles.jsx (추측 버블 표시)
src/domains/freetalk/components/
├── FreeTalkRoom.jsx (채팅 + 게임 통합 뷰)
└── GameModePanel.jsx (리팩토링 - 위 컴포넌트 조합)
```
Acceptance Criteria
Tasks
컴포넌트 Props 설계
Timer.jsx
```typescript
interface TimerProps {
remainingTime: number;
totalTime: number;
showProgress?: boolean;
size?: 'small' | 'medium' | 'large';
}
```
ScoreBoard.jsx
```typescript
interface ScoreBoardProps {
scores: Record<string, number>;
currentDrawerId?: string;
currentUserId: string;
}
```
DrawingCanvas.jsx
```typescript
interface DrawingCanvasProps {
isDrawer: boolean;
onDraw: (data: DrawingData) => void;
onClear: () => void;
receivedDrawing?: DrawingData;
brushColor: string;
brushSize: number;
}
```
우선순위
🟢 중간 - 코드 품질 및 유지보수성 개선
예상 작업량
Parent Epic
선행 작업
Story 개요
현재
GameModePanel.jsx에 혼합된 채팅/게임 UI를 각 도메인별 컴포넌트로 분리합니다.재사용성과 테스트 용이성을 개선합니다.
현재 구조
```
src/domains/freetalk/components/
├── GameModePanel.jsx (채팅 + 게임 + 캔버스 혼합, 700줄+)
├── ChatInput.jsx
├── ChatRoomModal.jsx
└── DrawingCanvas.jsx
```
변경 후 구조
```
src/domains/chat/components/
├── ChatRoom.jsx (채팅방 컨테이너)
├── ChatMessages.jsx (메시지 목록)
├── ChatInput.jsx (입력창)
└── ChatBubble.jsx (메시지 버블)
src/domains/catchmind/components/
├── CatchmindGame.jsx (게임 컨테이너)
├── DrawingCanvas.jsx (그리기 캔버스)
├── DrawingTools.jsx (그리기 도구)
├── GuessInput.jsx (정답 입력)
├── ScoreBoard.jsx (점수판)
├── Timer.jsx (타이머 표시)
├── WordDisplay.jsx (단어 표시 - 출제자용)
└── GuessBubbles.jsx (추측 버블 표시)
src/domains/freetalk/components/
├── FreeTalkRoom.jsx (채팅 + 게임 통합 뷰)
└── GameModePanel.jsx (리팩토링 - 위 컴포넌트 조합)
```
Acceptance Criteria
Tasks
컴포넌트 Props 설계
Timer.jsx
```typescript
interface TimerProps {
remainingTime: number;
totalTime: number;
showProgress?: boolean;
size?: 'small' | 'medium' | 'large';
}
```
ScoreBoard.jsx
```typescript
interface ScoreBoardProps {
scores: Record<string, number>;
currentDrawerId?: string;
currentUserId: string;
}
```
DrawingCanvas.jsx
```typescript
interface DrawingCanvasProps {
isDrawer: boolean;
onDraw: (data: DrawingData) => void;
onClear: () => void;
receivedDrawing?: DrawingData;
brushColor: string;
brushSize: number;
}
```
우선순위
🟢 중간 - 코드 품질 및 유지보수성 개선
예상 작업량