# 專案結構

本文件說明 ConvertX-CN 的程式碼結構與架構。

---

## 目錄結構

```
ConvertX-CN/
├── src/                    # 前端原始碼
│   ├── index.tsx           # 主入口
│   ├── main.css            # 主樣式
│   ├── components/         # React 元件
│   ├── converters/         # 轉換器定義
│   ├── db/                  # 資料庫相關
│   ├── helpers/             # 工具函數
│   ├── i18n/                # 國際化
│   ├── icons/               # 圖示元件
│   ├── locales/             # 翻譯檔案
│   ├── pages/               # 頁面元件
│   ├── theme/               # 主題相關
│   └── transfer/            # 檔案傳輸
├── public/                 # 靜態資源
├── api-server/             # Rust API Server（選用）
│   ├── src/                 # Rust 原始碼
│   ├── docs/                # API 文件
│   └── tests/               # 測試
├── docs/                   # 文件
├── tests/                  # 測試
├── scripts/                # 腳本
├── data/                   # 資料目錄（runtime）
├── Dockerfile              # Docker 建構檔
├── compose.yaml            # Docker Compose
└── package.json            # Node.js 依賴
```

---

## 技術棧

### 前端

| 技術        | 用途     |
| ----------- | -------- |
| Bun         | Runtime  |
| Elysia      | Web 框架 |
| React       | UI 元件  |
| TailwindCSS | 樣式     |
| TypeScript  | 類型安全 |

### 後端 (Web UI)

| 技術   | 用途     |
| ------ | -------- |
| Bun    | Runtime  |
| Elysia | Web 框架 |
| SQLite | 資料庫   |

### API Server（選用）

| 技術          | 用途     |
| ------------- | -------- |
| Rust          | 語言     |
| Axum          | Web 框架 |
| async-graphql | GraphQL  |

---

## 核心模組

### src/converters/

定義所有轉換器的設定與格式支援。

```
converters/
├── main.ts          # 轉換器主邏輯
├── types.ts         # 類型定義
├── ffmpeg.ts        # FFmpeg 設定
├── imagemagick.ts   # ImageMagick 設定
├── libreoffice.ts   # LibreOffice 設定
├── pandoc.ts        # Pandoc 設定
├── calibre.ts       # Calibre 設定
└── ...
```

### src/i18n/

國際化模組，支援 65 種語言。

```
i18n/
├── index.ts         # i18n 初始化
└── service.ts       # 語言服務
```

### src/locales/

翻譯檔案，每個語言一個 JSON 檔案。

```
locales/
├── en.json          # 英文
├── zh-TW.json       # 繁體中文
├── zh-CN.json       # 簡體中文
├── ja.json          # 日文
└── ...
```

### src/transfer/

檔案傳輸模組，處理上傳與下載。

```
transfer/
├── upload.ts        # 上傳邏輯
├── download.ts      # 下載邏輯
└── chunked.ts       # 分段傳輸
```

---

## API Server 結構

```
api-server/
├── src/
│   ├── main.rs      # 入口
│   ├── lib.rs       # 模組定義
│   ├── config.rs    # 設定
│   ├── auth.rs      # JWT 認證
│   ├── engine.rs    # 引擎管理
│   ├── conversion.rs# 轉換邏輯
│   ├── rest.rs      # REST API
│   ├── graphql.rs   # GraphQL API
│   ├── models.rs    # 資料模型
│   └── error.rs     # 錯誤處理
├── tests/
│   ├── api_tests.rs
│   ├── graphql_tests.rs
│   └── integration_tests.rs
└── docs/
    ├── API_SPEC.md
    └── ARCHITECTURE.md
```

---

## 資料流

### 檔案轉換流程

```
1. 使用者上傳檔案
   ↓
2. 儲存到 data/uploads/
   ↓
3. 呼叫對應轉換器
   ↓
4. 輸出到 data/output/
   ↓
5. 使用者下載結果
```

### 檔案傳輸策略

| 檔案大小 | 傳輸方式 | 說明         |
| -------- | -------- | ------------ |
| ≤ 10MB   | 直接傳輸 | 單一請求完成 |
| > 10MB   | 分段傳輸 | 5MB chunks   |

---

## 相關文件

- [本地開發](本地開發.md)
- [貢獻指南](貢獻指南.md)
- [測試策略](../測試/測試策略.md)
