npm package: @mediclassics/book-yaml-tools
Description: YAML to JSON converter with MongoDB and S3 integration for book data
Author: Mediclassics
Latest version: 0.2.3

# @mediclassics/book-yaml-tools

[![npm version](https://badge.fury.io/js/@mediclassics%2Fbook-yaml-tools.svg)](https://www.npmjs.com/package/@mediclassics/book-yaml-tools)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

<한의학고전DB>에서 사용하는 YAML 형식의 서적 데이터를 JSON으로 변환하고 MongoDB와 S3에 배포하는 도구 모음입니다.

📦 **npm**: https://www.npmjs.com/package/@mediclassics/book-yaml-tools

## 설치

```bash
# 전역 설치 (CLI 사용)
npm install -g @mediclassics/book-yaml-tools

# 프로젝트에 설치 (프로그래밍 API 사용)
npm install @mediclassics/book-yaml-tools
```

## 환경 설정

다음 환경변수가 필요합니다:

```bash
# MongoDB
MONGODB_URI=mongodb+srv://...
MONGODB_DATABASE=your-database

# AWS S3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=ap-northeast-2
S3_BUCKET_NAME=your-bucket
S3_BASE_URL=https://your-cdn.com
```

## CLI 사용법

### YAML을 JSON으로 변환

```bash
book-yaml convert books/침구극비전 -o output/
```

### S3에 이미지 업로드

```bash
book-yaml upload books/침구극비전
```

### MongoDB에 데이터 삽입

```bash
book-yaml insert output/침구극비전_abc123
```

### MongoDB에서 데이터 삭제

```bash
# 특정 서적 삭제
book-yaml delete abc123

# 모든 컬렉션 삭제
book-yaml delete --all --force

# 상태 확인
book-yaml delete --status
```

## 프로그래밍 API

### 기본 사용법

```javascript
import { convertBook, syncBookImages } from '@mediclassics/book-yaml-tools';

// YAML을 JSON으로 변환
await convertBook('books/침구극비전');

// S3에 이미지 업로드
await syncBookImages('books/침구극비전');
```

### 고급 사용법

```javascript
import { BookYamlTools } from '@mediclassics/book-yaml-tools';

const tools = new BookYamlTools({
  mongoUri: 'mongodb+srv://...',
  mongoDatabase: 'my-database',
  s3Bucket: 'my-bucket',
  s3Region: 'ap-northeast-2',
  s3BaseUrl: 'https://cdn.example.com'
});

// YAML 변환
await tools.convertYamlToJson('books/침구극비전', 'output/');

// S3 업로드
await tools.uploadToS3('books/침구극비전');

// MongoDB 삽입
await tools.insertToMongoDB('output/침구극비전_abc123');

// MongoDB 삭제
await tools.deleteFromMongoDB('abc123');
```

### 유틸리티 함수

```javascript
import { 
  TextProcessor, 
  PostProcessor, 
  encodeContents,
  decodeContents 
} from '@mediclassics/book-yaml-tools';

// 텍스트 처리
const processor = new TextProcessor();
const processed = processor.processText(text);

// HTML 압축
const encoded = encodeContents(contents);
const decoded = decodeContents(encoded);
```

## 데이터 구조

### 입력 (YAML)

```
books/
└── 책이름/
    ├── book.yaml      # 서적 내용
    ├── meaning.yaml   # 의미 분류
    └── images/        # 이미지 파일들
        ├── letter/
        ├── picture/
        └── thumbnail/
```

### 출력 (JSON)

```
output/
└── 책이름_bookId/
    ├── book.json              # 원본 JSON
    ├── book-compressed.json   # 압축된 JSON
    ├── config.json           # 메타데이터
    ├── toc.json             # 목차
    ├── meaning.json         # 의미 분류
    └── image-mapping.json   # 이미지 URL 매핑
```

### MongoDB 컬렉션

- `book_meta`: 서적 메타데이터 (config, toc)
- `book_content`: 서적 내용
- `book_image`: 이미지 정보
- `book_meaning`: 의미 분류

## 개발

```bash
# 저장소 클론
git clone https://github.com/mediclassics-src/book-yaml-tools.git
cd book-yaml-tools

# 의존성 설치
npm install

# 테스트
npm test

# 로컬 개발
npm link
```

## 라이선스

MIT

## 기여

Issues와 Pull Requests를 환영합니다.

## 지원

문의사항은 [GitHub Issues](https://github.com/mediclassics-src/book-yaml-tools/issues)에 등록해주세요.