# ThreadAuto 승인 워크플로우 구현

## 목표
콘텐츠 발행 전 제이회장님의 개별 승인을 받는 워크플로우 추가.
안정화 후 자동 모드로 전환 가능하도록 설계.

## 프로젝트 경로
`/home/jay/projects/ThreadAuto/`

## 현재 파이프라인 흐름 (기존)
1. daily_runner.py (새벽 5시) → 크롤링 → 소재선택 → 콘텐츠 20개 생성 → daily_queue 저장
2. publish_worker.py (매분) → daily_queue에서 시간 도달한 포스트 → Threads API 발행

## 변경할 흐름 (승인 모드)
1. daily_runner.py → 콘텐츠 생성 → daily_queue에 `status: "pending"` 저장 (기존과 동일)
2. **승인 요청기(신규)**: 스케줄된 발행 시간 도달 시 → 해당 포스트 미리보기를 제이회장님 텔레그램으로 전송
3. **대기**: 제이회장님이 "승인" 할 때까지 해당 건 발행하지 않음
4. **승인 처리(신규)**: 승인 시 해당 건 즉시 발행 → 다음 대기 건 미리보기 자동 전송
5. **자동 모드**: config에서 `APPROVAL_MODE = false`이면 기존처럼 자동 발행

## 구현 상세

### 1. config.py 수정
```python
# 승인 모드 설정
APPROVAL_MODE = True  # True: 승인 필요, False: 자동 발행
APPROVAL_CHAT_ID = "6937032012"  # 제이회장님 텔레그램 chat ID
APPROVAL_KEY = "c119085addb0f8b7"  # cokacdir key
```

### 2. daily_queue JSON 구조 수정
각 포스트에 승인 관련 필드 추가:
```json
{
  "id": "post-001",
  "publish_time": "2026-03-13T07:29:00+09:00",
  "content_type": "text_empathy",
  "content": "포스트 본문...",
  "status": "pending",          // pending → awaiting_approval → approved → published
  "approval_sent_at": null,     // 승인 요청 전송 시각
  "approved_at": null,          // 승인 시각
  "published_at": null          // 발행 시각
}
```

### 3. approval_sender.py (신규 생성)
- 위치: `scheduler/approval_sender.py`
- 역할: 다음 발행 예정 포스트의 미리보기를 제이회장님에게 전송
- 동작:
  1. daily_queue에서 status="pending"이고 publish_time이 현재 이전인 첫 번째 포스트를 찾음
  2. 미리보기 포맷팅:
     - 텍스트 포스트: 본문 전체 + 타입 + 카테고리
     - 카드뉴스: 캡션 + 이미지 파일 경로
     - 영상: 캡션 + 영상 정보
  3. `cokacdir --sendfile` 또는 `cokacdir --cron`으로 제이회장님에게 전송
  4. status를 "awaiting_approval"로 변경
  5. 한 번에 1건만 전송 (다음 건은 현재 건 승인 후)
- **실행 방식**: publish_worker.py에서 호출하거나, cron으로 주기적 실행

### 4. publish_worker.py 수정
- APPROVAL_MODE == True 일 때:
  - status="pending" → approval_sender 호출하여 미리보기 전송
  - status="awaiting_approval" → 대기 (발행하지 않음)
  - status="approved" → 발행 실행 → status="published"
- APPROVAL_MODE == False 일 때:
  - 기존 로직 유지 (시간 도달 시 바로 발행)

### 5. approve_post.py (신규 생성)
- 위치: `scheduler/approve_post.py`
- 역할: 제이회장님이 "승인"하면 호출되는 스크립트
- CLI 인터페이스:
  ```bash
  python3 approve_post.py                    # 현재 awaiting_approval인 건 승인
  python3 approve_post.py --reject           # 현재 건 거절 (skip)
  python3 approve_post.py --reject --reason "수정 필요"  # 거절 + 사유
  ```
- 동작:
  1. daily_queue에서 status="awaiting_approval"인 첫 번째 포스트 찾기
  2. 승인: status → "approved", approved_at 기록
  3. 즉시 Threads API로 발행
  4. 발행 성공 시: status → "published", published_at 기록
  5. 다음 pending 포스트가 있으면 자동으로 미리보기 전송
  6. 거절: status → "rejected", 다음 포스트 미리보기 전송

### 6. 미리보기 포맷
텔레그램으로 전송할 미리보기 메시지 형식:

**텍스트 포스트:**
```
📋 발행 승인 요청 [3/20]

카테고리: 고민공감
타입: text_empathy (공감형 질문)
예정시간: 07:29

---
[포스트 본문]
---

✅ "승인" → 발행
❌ "스킵" → 건너뛰기
✏️ 수정 지시 → 수정 후 재전송
```

**카드뉴스:** 위 포맷 + 이미지 파일 첨부 (cokacdir --sendfile)

### 7. 아누 연동
- 제이회장님이 "승인"이라고 말하면:
  - 아누가 `python3 /home/jay/projects/ThreadAuto/scheduler/approve_post.py` 실행
- "스킵"이라고 말하면:
  - 아누가 `python3 /home/jay/projects/ThreadAuto/scheduler/approve_post.py --reject` 실행

## 주의사항
- 기존 파이프라인 로직을 깨뜨리지 말 것. APPROVAL_MODE=False이면 기존과 100% 동일하게 동작해야 함
- 큐 파일 잠금(locking) 고려: 동시 접근 시 파일 깨짐 방지
- 미리보기 전송 실패 시 재시도 로직
- daily_queue 경로: `scheduler/daily_queue/{YYYY-MM-DD}.json`
- cokacdir 명령어 경로: `/usr/local/bin/cokacdir` 또는 `cokacdir` (PATH에 있음)
- **cokacdir 사용법**:
  - 파일 전송: `cokacdir --sendfile <filepath> --chat 6937032012 --key c119085addb0f8b7`
  - 메시지 전송 (cron 즉시): `cokacdir --cron "<message>" --at "1m" --chat 6937032012 --key c119085addb0f8b7 --once`
- pyright 타입체크 통과 필수
- 기존 테스트 깨뜨리지 말 것

## 테스트 방법
1. APPROVAL_MODE=True 설정
2. 테스트용 daily_queue 생성 (포스트 2~3개)
3. approve_post.py 실행하여 승인→발행 흐름 확인
4. APPROVAL_MODE=False로 전환 후 기존 자동 발행 동작 확인
