Approval-Correlation: 0543bb321a84cb936bc0ac4988615840
Plan-SHA256: 437a85f68d151ed4db780511812834041cfec5e7cf021fb77e238d5a6196e6fb
Base-SHA: 256be64ac7
40 lines
1.6 KiB
Markdown
40 lines
1.6 KiB
Markdown
# 데이터 모델
|
|
|
|
## 대화 상태
|
|
|
|
`ChatApp`은 세션 동안 다음 목록을 메모리에 유지한다.
|
|
|
|
- `submitted_inputs`: `trim`된 유효 사용자 메시지 목록
|
|
- `selected_responses`: 각 사용자 메시지에 대응하는 선택 응답 목록
|
|
|
|
두 목록은 같은 인덱스를 사용하며, 유효한 제출 하나마다 항목 하나씩 추가된다. 공백 입력은 어느 목록도 변경하지 않는다.
|
|
|
|
## 고정 응답 목록
|
|
|
|
`src/chat_tui/app.py`의 `RESPONSE_MESSAGES` 상수는 다음 다섯 문자열을 순서대로 보유한다.
|
|
|
|
1. `안녕하세요! 무엇을 도와드릴까요?`
|
|
2. `그것은 제가 처리하기 불가능합니다.`
|
|
3. `맡겨만 주세요.`
|
|
4. `지금 처리 중입니다.`
|
|
5. `작업을 완료하였습니다.`
|
|
|
|
응답은 `random.choice(RESPONSE_MESSAGES)`로 선택한다. 난수 선택 자체는 테스트에서 `chat_tui.app.random.choice`를 대체할 수 있는 경계로 취급한다.
|
|
|
|
## 대화 항목
|
|
|
|
유효한 입력이 제출되면 대화 영역에 다음 두 `Label`을 순서대로 추가한다.
|
|
|
|
1. `user-message` 클래스의 사용자 메시지
|
|
2. `response-message` 클래스의 선택 응답
|
|
|
|
사용자 메시지는 입력값을 `strip()`한 결과이며, 선택 응답은 고정 응답 목록의 문자열이다.
|
|
|
|
## 불변 조건
|
|
|
|
- 공백 제거 결과가 빈 문자열이면 상태와 화면을 변경하지 않는다.
|
|
- 유효한 입력마다 사용자 메시지가 응답보다 먼저 추가된다.
|
|
- `submitted_inputs`와 `selected_responses`의 길이는 항상 같다.
|
|
- 응답은 고정 목록에 포함된 값이어야 한다.
|
|
- 대화 기록은 애플리케이션 세션 안에서만 유지한다.
|