# 美家卡智影 API

美家卡智影后端服务 - 基于 FastAPI + Redis 的 AI 视频创作 API。

## 技术栈

| 组件 | 技术 | 版本 |
|------|------|------|
| Web 框架 | FastAPI | ^0.110.0 |
| 数据库 | PostgreSQL | 15+ |
| ORM | SQLAlchemy | 2.0+ (异步) |
| 缓存/状态 | Redis | 7.x |
| 异步调度 | Async Engine (Slot Scheduler) | Python asyncio |
| 部署 | Docker + Docker Compose | - |

## 快速开始

### 1. 环境准备

确保已安装：
- Python 3.11+
- Docker & Docker Compose（推荐）
- 或本地 PostgreSQL + Redis

### 2. 使用 Docker Compose 启动（推荐）

```bash
# 1. 克隆项目后进入目录
cd python-api

# 2. 复制环境变量配置
cp .env.example .env

# 3. 启动所有服务
docker-compose up -d

# 4. 查看日志
docker-compose logs -f api

# 5. 服务地址
# API: http://localhost:8080
# 文档: http://localhost:8080/docs
```

### 3. 本地开发

```bash
# 1. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 2. 安装依赖
pip install -e ".[dev]"

# 3. 配置环境变量
cp .env.example .env
# 编辑 .env，修改数据库连接等配置

# 4. 启动 PostgreSQL 和 Redis（Docker）
docker-compose up -d db redis

# 5. 启动开发服务器
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# 7. 启动 Async Engine Scheduler（另开终端）
python -m app.scheduler.main
```

## 项目结构

```
python-api/
├── app/                    # 主应用代码
│   ├── api/v1/            # API 路由
│   ├── core/              # 核心工具（安全、异常）
│   ├── db/                # 数据库配置
│   ├── models/            # SQLAlchemy 模型
│   ├── schemas/           # Pydantic Schema
│   ├── services/          # 业务逻辑
│   ├── scheduler/         # Async Engine 异步任务调度
│   ├── ai/                # AI 模型相关
│   ├── utils/             # 工具函数
│   ├── config.py          # 配置管理
│   └── main.py            # FastAPI 入口
├── docker-compose.yml     # Docker 编排
├── Dockerfile             # Docker 镜像
├── pyproject.toml         # 项目依赖
└── README.md              # 本文档
```

## 数据模型

### 核心实体

- **User** - 用户/设备（设备 ID + JWT 认证）
- **Project** - 视频创作项目
- **ScriptSegment** - 脚本分镜
- **MediaAsset** - 媒体元数据（音频/视频/封面）
- **TaskQueue** - 异步任务队列

## API 路由

| 模块 | 接口 | 说明 |
|------|------|------|
| **auth** | `POST /auth/send-code` | 发送验证码 |
| | `POST /auth/login` | 登录 |
| | `POST /auth/refresh` | 刷新 Token |
| | `POST /auth/logout` | 登出 |
| | `GET /auth/me` | 获取用户信息 |
| | `PATCH /auth/me` | 更新用户信息 |
| **system** | `GET /system/version` | 版本信息 |
| **events** | `GET /events` | SSE 事件流 |
| **tasks** | `POST /tasks/{type}` | 创建异步任务 |
| | `GET /tasks` | 任务列表 |
| | `GET /tasks/{id}` | 任务状态 |
| | `GET /tasks/{id}/result` | 任务结果 |
| **script** | `GET /script/categories` | 脚本分类 |
| | `POST /script/polish` | 文案润色 |
| | `POST /script/generate-title` | 生成标题 |
| **voice** | `GET /voice/voices` | 音色列表 |
| | `POST /voice/synthesize` | TTS 合成 |
| | `POST /voice/clone/submit` | 提交声音复刻 |
| | `GET /voice/clone/query/{id}` | 查询复刻状态 |
| **caption** | `POST /caption/ata/align` | 自动字幕打轴 |
| **upload** | `POST /upload/video` | 上传视频 |
| | `POST /upload/audio` | 上传音频 |
| **vidu** | `POST /vidu/callback` | Vidu 回调 |
| **materials** | `POST /materials/match` | 素材匹配 |
| | `POST /materials/batch-match` | 批量素材匹配 |
| **cover** | `GET /cover-backgrounds` | 封面背景图 |
| **points** | `GET /points/balance` | 积分余额 |
| | `GET /points/transactions` | 积分流水 |
| | `POST /points/recharge` | 创建充值订单 |
| | `POST /points/recharge/notify` | 微信支付回调 |
| | `GET /points/recharge/query/{id}` | 查询充值订单 |
| | `GET /points/recharge-options` | 充值档位 |
| | `GET /points/chargeable-types` | 扣费业务类型 |
| | `GET /points/rules` | 积分计费规则 |
| | `POST /points/consume` | 消费积分 |

## 环境变量

见 `.env.example`，主要配置项：

| 变量 | 说明 | 默认值 |
|------|------|--------|
| `DATABASE_URL` | PostgreSQL 连接字符串 | `postgresql+asyncpg://postgres:postgres@localhost:5432/meijiaka_zy` |
| `REDIS_URL` | Redis 连接字符串 | `redis://localhost:6379/0` |
| `SECRET_KEY` | JWT 签名密钥 | 必须修改 |
| `OPENAI_API_KEY` | OpenAI API Key | - |
| `CORS_ORIGINS` | 允许的跨域来源 | `http://localhost:1420` |

## 开发规范

### 代码风格

```bash
# 格式化
black app/

# 检查
ruff check app/
mypy app/

# 测试
pytest
```

### 提交规范

- `feat:` 新功能
- `fix:` 修复
- `docs:` 文档
- `refactor:` 重构
- `test:` 测试

## 与前端集成

Tauri 前端默认连接 `http://127.0.0.1:8080/api/v1`。

云端部署后：
1. 修改前端 `src/api/client.ts` 中的 `PYTHON_API_BASE_URL`
2. 更新 `tauri.conf.json` CSP 配置，添加云端域名到 `connect-src`

## 许可

MIT
