# InsuWiki 위키 데이터 저장 + CRUD API

## 작업 개요
task-1518.1에서 추출한 카카오톡 오픈채팅 지식 항목(145개)을 InsuWiki에 저장하고,
대시보드에서 관리할 수 있는 CRUD API를 구현한다.

## Phase 1 산출물 참조
- 추출된 지식: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_entries.json` (145개 항목)
- 파서: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/kakao_parser.py`
- 추출기: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor.py`

## 산출물 위치
`/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_store.py`
`/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_api.py`

## 구현 요구사항

### 1. wiki_store.py — SQLite 기반 위키 저장소
- SQLite DB 경로: `/home/jay/projects/insuwiki/data/wiki.db`
- 테이블 구조:
  ```sql
  CREATE TABLE wiki_entries (
    id TEXT PRIMARY KEY,           -- "kakao-001"
    title TEXT NOT NULL,
    category TEXT NOT NULL,        -- 보상/고지의무/약관/상품/기타
    subcategory TEXT,
    question TEXT,
    answer TEXT,
    expert TEXT,
    source_date TEXT,
    source_chat TEXT,              -- 채팅방 이름
    keywords TEXT,                 -- JSON array string
    confidence TEXT,               -- high/medium/low
    raw_thread TEXT,               -- JSON array string
    status TEXT DEFAULT 'draft',   -- draft/approved/rejected
    created_at TEXT,
    updated_at TEXT
  );
  CREATE VIRTUAL TABLE wiki_fts USING fts5(title, question, answer, keywords, content=wiki_entries, content_rowid=rowid);
  ```
- CRUD 함수:
  - `insert_entry(entry: dict) -> str` — 항목 삽입, id 반환
  - `get_entry(id: str) -> dict | None`
  - `update_entry(id: str, updates: dict) -> bool`
  - `delete_entry(id: str) -> bool`
  - `list_entries(category=None, status=None, limit=50, offset=0) -> list[dict]`
  - `search_entries(query: str, limit=20) -> list[dict]` — FTS5 전문검색
  - `approve_entry(id: str) -> bool` — status를 approved로 변경
  - `reject_entry(id: str) -> bool` — status를 rejected로 변경
  - `bulk_import(entries: list[dict]) -> int` — wiki_entries.json 일괄 import
  - `get_stats() -> dict` — 카테고리별/상태별 통계
- LLM 정제: bulk_import 시 제목/질문/답변이 거칠면 **팀 봇(Haiku/Sonnet)이 직접 정제 불필요** — 현재는 규칙 기반 그대로 저장. 추후 별도 정제 태스크로 분리.

### 2. wiki_api.py — FastAPI 엔드포인트
- `/api/wiki/entries` — GET (목록), POST (생성)
- `/api/wiki/entries/{id}` — GET (상세), PUT (수정), DELETE (삭제)
- `/api/wiki/entries/{id}/approve` — POST (승인)
- `/api/wiki/entries/{id}/reject` — POST (반려)
- `/api/wiki/search?q=광응고술` — GET (검색)
- `/api/wiki/stats` — GET (통계)
- `/api/wiki/import` — POST (bulk import)
- 기존 대시보드 서버(`/home/jay/workspace/dashboard/server.py`)에 마운트 가능하도록 APIRouter 사용

### 3. CLI
```bash
# wiki_entries.json import
python3 -m kakao_knowledge.wiki_store import wiki_entries.json

# 통계 확인
python3 -m kakao_knowledge.wiki_store stats

# 검색
python3 -m kakao_knowledge.wiki_store search "광응고술"
```

### 4. 테스트
- CRUD 단위 테스트 (삽입/조회/수정/삭제)
- FTS5 검색 테스트
- bulk_import 테스트
- 통계 테스트
- API 엔드포인트 테스트

## 완료 기준
1. wiki_store.py CRUD + FTS5 동작
2. wiki_api.py 엔드포인트 동작
3. wiki_entries.json 145개 항목 import 성공
4. 테스트 전체 PASS
5. pyright 에러 0건
