This commit is contained in:
happybell80 2025-12-23 17:35:39 +09:00
commit 1ec29c3c39
2 changed files with 165 additions and 11 deletions

View File

@ -184,21 +184,32 @@ CREATE INDEX idx_activity_log_type ON activity_log(activity_type);
1. ✅ **DB 테이블 생성**: `robeing_diary`, `activity_log` 테이블 생성 완료 (`rb8001/app/state/diary_repository.py`)
2. ⏳ **활동 로그 기록**: 스킬 실행 시 `activity_log`에 자동 기록 로직 추가
3. **Diary Aggregator 구현**: `rb8001/app/services/diary/aggregator.py` 생성, 모든 데이터 소스 집계
4. **일기 생성 로직**: `rb8001/app/services/diary/generator.py` 생성, LLM으로 일기 텍스트 생성
5. **스케줄러 등록**: `rb8001/app/scheduler/jobs/diary_generator.py` 생성, `main.py`에 등록
6. **API 엔드포인트**: `rb8001/app/router/diary.py` 생성, `/api/diary/{date}` 구현
7. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가
3. **Diary Aggregator 구현**: `rb8001/app/services/diary/aggregator.py` 생성, 모든 데이터 소스 집계 완료
4. **일기 생성 로직**: `rb8001/app/services/diary/generator.py` 생성, LLM으로 일기 텍스트 생성 완료
5. **스케줄러 등록**: `rb8001/app/scheduler/jobs/diary_generator.py` 생성, `main.py`에 등록 완료
6. **API 엔드포인트**: `rb8001/app/router/diary_endpoint.py` 생성, `/api/diary/{date}` 구현 완료
7. **관리자 대시보드**: admin-dashboard에 일기 목록/상세 페이지 추가 완료
8. ⏳ **DOCS 동기화 스크립트**: 선택적으로 별도 스크립트로 DOCS 동기화
## 진행 상황
## 구현 완료
**완료 (2025-12-09)**:
- DB 테이블 스키마 정의 및 생성 (`_ensure_tables()`)
- Repository 함수 구현 (`save_diary`, `get_diary`, `save_activity_log`)
- 테스트 완료 (더미 데이터 저장/조회 검증)
**완료일**: 2025-12-23
**다음 단계**: Diary Aggregator 및 일기 생성 로직 구현
**구현 완료 문서**: [로빙 일기 시스템 구현 완료](../../journey/troubleshooting/251223_로빙_일기_시스템_구현_완료.md)
**주요 완료 사항**:
- ✅ DB 테이블 스키마 정의 및 생성 (`_ensure_tables()`)
- ✅ Repository 함수 구현 (`save_diary`, `get_diary`, `save_activity_log`)
- ✅ Diary Aggregator 구현 (대화/활동/감정/성장/이슈 데이터 집계)
- ✅ LLM 일기 생성 로직 구현 (Gemini 사용)
- ✅ 스케줄러 등록 (매일 오전 2시 자동 생성)
- ✅ API 엔드포인트 구현 (`GET /api/diary/{date}`)
- ✅ Admin Dashboard 일기 페이지 추가 (목록/상세 조회)
- ✅ 일기 클릭 시 본문 표시 버그 수정
**미구현 항목**:
- ⏳ 스킬 실행 시 `activity_log` 자동 기록 로직 (수동 기록 가능)
- ⏳ DOCS 동기화 스크립트 (선택적)
---

View File

@ -0,0 +1,143 @@
# 로빙 일기 시스템 구현 완료
**날짜**: 2025-12-23
**작성자**: Claude
**관련 문서**: [로빙 일기 시스템 계획](../plans/251117_claude_robeing_diary_시스템_계획.md)
---
## 구현 완료 사항
### 1. 백엔드 구현 (rb8001)
**파일 위치**:
- `rb8001/app/state/diary_repository.py` - DB 테이블 및 저장/조회 함수
- `rb8001/app/services/diary/aggregator.py` - 데이터 집계
- `rb8001/app/services/diary/generator.py` - LLM 일기 생성
- `rb8001/app/router/diary_endpoint.py` - API 엔드포인트
- `rb8001/app/scheduler/jobs/diary_generator.py` - 스케줄러 작업
- `rb8001/main.py` - 스케줄러 등록
**기능**:
- 매일 오전 2시 자동 일기 생성 (APScheduler cron)
- 데이터 집계: 대화 로그, 활동 로그, 감정 데이터, 성장 데이터, 이슈 데이터
- LLM(Gemini)으로 마크다운 형식 일기 생성
- PostgreSQL `robeing_diary` 테이블에 저장
- API: `GET /api/diary/{date}?robeing_id=rb8001`
### 2. Admin Dashboard 구현
**파일 위치**:
- `admin-dashboard/frontend/index.html` - 일기 페이지 UI
- `admin-dashboard/frontend/app.js` - 일기 목록/상세 로드 함수
- `admin-dashboard/backend/admin_routes.py` - 일기 API 프록시
- `admin-dashboard/frontend/styles.css` - 일기 스타일
**기능**:
- 일기 목록 조회 (최근 30일)
- 일기 상세 조회 (날짜별)
- 날짜 입력으로 조회
- rb8001 API 프록시 (`/admin/api/diary/list`, `/admin/api/diary/{date}`)
### 3. 버그 수정
**문제**: 일기 목록에서 항목 클릭 시 본문이 표시되지 않음
**원인**: `loadDiaryByDate` 함수가 IIFE 내부에 있어 전역 스코프에서 접근 불가
**해결**: `loadDiary`, `loadDiaryByDate` 함수를 IIFE 밖으로 이동하여 전역 함수로 노출
**커밋**: `d734322` - fix: 일기 클릭 시 본문 표시 안 되는 문제 수정 (전역 함수로 노출)
---
## 알려진 이슈
### robeing 테이블 스키마 불일치
**문제**: `DiaryAggregator._get_growth()` 함수에서 `robeing_id` 컬럼을 조회하나 실제 테이블에는 해당 컬럼이 없음
**영향**: 성장 데이터 조회 실패 (일기 생성에는 영향 없음, 빈 stats로 저장)
**해결 필요**: `robeing` 테이블 스키마 확인 후 쿼리 수정 또는 테이블 스키마 수정
---
## 테스트 결과
### 일기 생성 테스트 (2025-12-22)
```bash
docker exec rb8001 python /code/scripts/generate_diary_manual.py
```
**결과**:
- ✅ 일기 생성 성공
- ✅ DB 저장 성공
- ✅ API 조회 정상 동작
- ⚠️ 성장 데이터 조회 실패 (robeing_id 컬럼 없음)
### API 테스트
```bash
curl "http://localhost:8001/api/diary/2025-12-22?robeing_id=rb8001"
```
**응답**:
```json
{
"date": "2025-12-22",
"robeing_id": "rb8001",
"content": "# 로빙 일기 2025-12-22\n\n## 오늘 한 일\n...",
"summary": "# 로빙 일기 2025-12-22",
"dominant_emotion": "surprise",
"stats": {}
}
```
### 브라우저 UI 테스트
- ✅ 일기 탭 표시 확인
- ✅ 일기 목록 로드 확인
- ✅ 일기 클릭 시 본문 표시 확인 (수정 후)
---
## 구현 단계별 완료 현황
1. ✅ **DB 테이블 생성**: `robeing_diary`, `activity_log` 테이블 생성 완료
2. ⏳ **활동 로그 기록**: 스킬 실행 시 자동 기록 로직 미구현 (수동 기록 가능)
3. ✅ **Diary Aggregator 구현**: 모든 데이터 소스 집계 완료
4. ✅ **일기 생성 로직**: LLM으로 일기 텍스트 생성 완료
5. ✅ **스케줄러 등록**: 매일 오전 2시 자동 생성 등록 완료
6. ✅ **API 엔드포인트**: `/api/diary/{date}` 구현 완료
7. ✅ **관리자 대시보드**: 일기 목록/상세 페이지 추가 완료
8. ⏳ **DOCS 동기화 스크립트**: 미구현 (선택적)
---
## 교훈
### 1. 전역 함수 노출 필요성
- `onclick` 핸들러에서 호출하는 함수는 전역 스코프에 있어야 함
- IIFE 내부 함수는 외부에서 접근 불가
- **해결**: 필요한 함수는 IIFE 밖으로 분리하여 전역 함수로 노출
### 2. API 응답 필드명 일관성
- 백엔드 API는 `content` 필드 사용
- 프론트엔드에서 `content || full_content`로 호환 처리
- **권장**: API 스펙 문서화 및 필드명 통일
### 3. DB 스키마 검증
- ORM 모델과 실제 테이블 스키마 불일치 가능성
- **권장**: 테이블 생성 시 스키마 검증 로직 추가 또는 마이그레이션 스크립트 사용
---
## 참고
- [로빙 일기 시스템 계획](../plans/251117_claude_robeing_diary_시스템_계획.md)
- `rb8001/app/services/diary/aggregator.py` - 데이터 집계 로직
- `rb8001/app/services/diary/generator.py` - LLM 일기 생성 로직
- `admin-dashboard/frontend/app.js` - 일기 UI 로직