# Wiki Revision History & Restore Specification

> **일시**: 2026-02-15 22:05
> **작성자**: Antigravity (Backend/Frontend Agent)
> **주제**: Wiki Revision History 구현 내용 및 기술 명세

---

## 1. 개요 (Overview)
Wiki 문서의 변경 이력을 관리하고, 특정 시점으로 내용을 복원(Restore)할 수 있는 기능을 구현함.
문서 수정 시마다 새로운 Revision을 생성하여 저장하고, 이를 조회 및 복구하는 UI를 제공함.

## 2. 데이터 구조 (Data Structure)

### 2.1. Firestore Schema
기존 `documents` 컬렉션의 하위 컬렉션(Subcollection)으로 `revisions`를 구성함.

- **Collection**: `documents/{docId}/revisions`
- **Document ID**: Auto-ID

| Field | Type | Description |
|---|---|---|
| `id` | string | Revision ID |
| `documentId` | string | 부모 문서 ID |
| `title` | string | 당시 문서 제목 |
| `content` | string | 당시 문서 내용 (HTML/Markdown) |
| `authorId` | string | 수정자 ID |
| `createdAt` | Timestamp | 수정 일시 |
| `changeLog` | string | 변경 사유 (예: "Updated via editor", "Restored from ...") |

## 3. 구현 상세 (Implementation Details)

### 3.1. DocumentService (`src/lib/services/document-service.ts`)

*   **`updateDocument`**:
    *   문서 업데이트 트랜잭션 내에서 `revisions` 컬렉션에 현재 상태를 스냅샷으로 저장.
    *   Optimistic Locking(버전 체크) 유지.
    *   MVC 패턴 준수를 위해 `handleSave` 로직을 Service 계층으로 이관.

*   **`getRevisions`**:
    *   특정 문서의 모든 Revision을 `createdAt` 내림차순(최신순)으로 조회.

*   **`restoreRevision`**:
    *   사용자가 선택한 Revision의 `title`, `content`로 메인 문서를 업데이트.
    *   이 '복원' 행위 자체도 새로운 Revision으로 기록됨 (Log: "Restored from revision ...").

### 3.2. UI Components

*   **`RevisionHistoryModal.tsx`**:
    *   문서의 이력 리스트를 표시하는 모달 컴포넌트.
    *   각 리비전의 작성일, 작성자(ID), 변경 로그 표시.
    *   **Restore 버튼**: 클릭 시 해당 버전으로 문서를 되돌림 (사용자 확인 절차 포함).

*   **`DocumentClient.tsx`**:
    *   Action Bar(우측 상단)에 "History" 버튼 추가 (편집/삭제 버튼 옆).
    *   `isHistoryOpen` 상태를 통해 모달 제어.

## 4. 검증 및 테스트 (Verification)
*   문서 수정 후 저장 시 Revision 생성 확인.
*   History 모달에서 리스트 조회 확인.
*   Restore 실행 시 문서 내용 변경 및 새로운 Revision 생성 확인.
