# OCDP Frontend

OCDP (Open Cloud Development Platform) Frontend - **Helm Chart 管理平台**

> 🎯 **专注于 Helm Charts**: 基于后端 OpenAPI 的前端应用，用于浏览、部署和管理 Helm Charts

---

## 🚀 快速开始

### 1. 安装依赖

```bash
npm install
```

### 2. 选择开发模式

本项目支持三种运行模式，通过 `Makefile` 命令启动：

#### **Mode 0** - Mock API，热重载（推荐快速开发）

```bash
make run-0
```

- ✅ 前端：`localhost:5173`（Vite 热重载）
- ✅ 后端：Mock/Stub 数据（不需要真实后端）
- ✅ 适用：快速 UI 开发和调试

#### **Mode 1** - Real API，热重载（集成测试）

```bash
make run-1
```

- ✅ 前端：`localhost:5173`（Vite 热重载）
- ✅ 后端：真实 API（`http://localhost:8080`）
- ⚠️ 需要后端服务运行

#### **Mode 2** - Docker Compose 部署（生产测试）

```bash
make run-2
```

- ✅ 前端：`localhost:3000`（Nginx + Docker 容器）
- ✅ 后端：容器化部署
- ✅ 适用：生产环境测试

### 3. 清理（Mode 2）

```bash
make clean-2
```

---

## 📋 命令列表

| 命令 | 说明 |
|------|------|
| `make run-0` | Mode 0 - Mock API，热重载前端 |
| `make run-1` | Mode 1 - Real API，热重载前端 |
| `make run-2` | Mode 2 - Docker Compose 部署 |
| `make clean-2` | 清理 Mode 2 容器 |

---

## 🔌 Backend OpenAPI 集成

### 架构

```
backend/docs/openapi.yaml
         ↓
   OpenAPI Generator
         ↓
  src/api/generated/  (自动生成的 API 客户端)
         ↓
  src/api/client.ts   (封装层，支持 Mode 切换)
         ↓
    React Components
```

### API 客户端使用

项目使用 OpenAPI Generator 生成的 TypeScript 客户端，根据运行模式自动切换：

- **Mode 0**: 使用 Mock 数据
- **Mode 1**: 调用真实后端 API（`localhost:8080`）
- **Mode 2**: Docker 环境，通过 Nginx 反向代理

### 使用示例

```typescript
import { api } from '@/api/client';

// 获取 Registries
const registries = await api.registries.list();

// 获取 Helm Chart 列表（自动过滤，只返回 Charts）
const charts = await api.artifacts.list('registry-id', 'repo-name');

// 获取 Chart 详情
const chart = await api.artifacts.get('registry-id', 'repo-name', 'version');

// 获取 Chart 的 values schema（用于部署配置）
const schema = await api.artifacts.getValuesSchema('registry-id', 'repo-name', 'version');

// 部署 Helm Chart
const instance = await api.instances.create({
  name: 'my-app',
  namespace: 'default',
  registry_id: 'registry-id',
  artifact_id: 'repo-name',
  version: '1.0.0',
  cluster_id: 'cluster-id'
});
```

### 重新生成 API Client

当后端 OpenAPI 规范更新时：

```bash
cd ..
make openapi-gen-frontend
```

---

## 🛠 技术栈

- **React 19** + **TypeScript** - UI 框架
- **Vite 7** - 构建工具和开发服务器
- **Tailwind CSS** - 样式框架
- **OpenAPI Generator** - API 客户端生成
- **Axios** - HTTP 客户端
- **React Router v7** - 路由管理

---

## 🎯 核心功能

- ✅ **Helm Chart 浏览**: 从 OCI Registry 浏览 Helm Charts（自动过滤）
- ✅ **Chart 部署**: 部署 Helm Chart 到 Kubernetes 集群
- ✅ **实例管理**: 管理已部署的 Helm Chart 实例
- ✅ **集群管理**: 管理 Kubernetes 集群连接
- ✅ **Registry 管理**: 管理 OCI Registry 配置
- ❌ **不支持**: 容器镜像管理（仅 Helm Charts）

---

## 📁 项目结构

```
frontend/
├── src/
│   ├── api/
│   │   ├── generated/        # 🤖 OpenAPI 自动生成的客户端
│   │   └── client.ts         # API 客户端封装（Mode 切换）
│   ├── features/             # 功能模块
│   │   ├── auth/             # 认证
│   │   ├── artifact/         # Helm Charts
│   │   ├── configuration/    # 配置管理
│   │   └── monitoring/       # 监控
│   ├── shared/               # 共享组件
│   ├── app/                  # 应用配置
│   └── main.tsx             # 入口文件
├── Makefile                 # 开发命令（三种模式）
├── package.json             # 依赖配置
├── vite.config.ts          # Vite 配置
├── docker-compose.dev.yml  # Docker Compose 配置
├── Dockerfile              # 生产构建
└── nginx.conf              # Nginx 配置
```

---

## 💡 开发工作流

### 日常开发（Mode 0）

```bash
make run-0
# 修改代码 → 自动热重载
```

### 集成测试（Mode 1）

```bash
# 1. 确保后端运行在 localhost:8080
cd ../backend
make run

# 2. 启动前端（Mode 1）
cd ../frontend
make run-1
```

### 生产测试（Mode 2）

```bash
make run-2
# 测试生产构建
# 完成后清理：
make clean-2
```

---

## 🐛 常见问题

### Mode 0 - 端口占用

```bash
lsof -ti:5173 | xargs kill -9
```

### Mode 1 - 后端连接失败

确保后端服务运行：

```bash
curl http://localhost:8080/health
```

### Mode 2 - 容器问题

```bash
# 查看日志
docker compose -f docker-compose.dev.yml logs -f

# 清理并重建
make clean-2
make run-2
```

### OpenAPI 客户端更新

```bash
# 在项目根目录执行
cd ..
make openapi-gen-frontend
```

---

## 📚 更多信息

- **后端项目**: `../backend`
- **OpenAPI 规范**: `../backend/docs/openapi.yaml`
- **查看所有命令**: `make help`

---

## 📄 License

MIT
