# MVP v3.0 — API 扩展设计（基于 v2.5）

v3.0 的原则是：**尽量复用 v2.5 API**，只增量增加 “数据闭环” 与 “WebUI 支持” 所需的最小接口。

## 1) 认证与权限

沿用 v2.5：
- Header：`Authorization: Bearer <token>`
- admin token：来自 `MVP_INTERNAL_TOKEN`
- 普通用户 token：由 admin 颁发并持久化在 SQLite

权限规则：
- 非 admin：只能访问自己的 task、自己的数据空间（`/private/users/<user_id>/...`）。
- 跨用户访问返回 404（不泄露存在性）。

## 2) 用户与 SFTPGo 联动（管理员接口）

### 2.1 创建用户（复用 v2.5）
`POST /api/v2/users`
- v3.0 行为：成功后，**可选**联动创建 SFTPGo 用户
  - v3.0 默认启用联动：创建 SFTPGo 用户 + 生成一次性密码（password 认证）
  - v3.0 仅保留该方案（方案 A）：不做外部认证/SSO 集成（留到更后续版本）
  - `data.sftpgo.admin_api_base` 推荐形如：`http://argus-sftpgo:8080/api/v2`（包含 `/api/v2` 前缀）

### 2.2 下发 token（复用 v2.5）
`POST /api/v2/users/{user_id}/tokens`

### 2.3 禁用用户（复用 v2.5）
`POST /api/v2/users/{user_id}:disable`
- v3.0 行为：联动禁用 SFTPGo 用户（可选）

### 2.4 SFTP 凭据管理（新增，管理员或用户自助）
（具体由你确认 v3.0 需要“用户自助”还是“管理员操作”）

#### 重置 SFTP 密码（管理员）
`POST /api/v2/users/{user_id}/sftp:reset_password`
- 返回：一次性密码（只返回一次，服务端不保存明文）
> v3.0 先只做 password 方案；SSH public key 作为后续版本可选增强（不在 v3.0 范围）。

## 3) 用户自助信息（新增）

### 3.1 获取当前用户信息
`GET /api/v2/me`
- 返回示例：
```json
{
  "user_id": "alice",
  "is_admin": false,
  "paths": {
    "home": "/private/users/alice",
    "datasets": "/private/users/alice/datasets",
    "models": "/private/users/alice/models",
    "code": "/private/users/alice/code",
    "jobs": "/private/users/alice/jobs",
    "trash_jobs": "/private/users/alice/trash/jobs"
  },
  "retention": {
    "jobs_trash_after_days": 3,
    "jobs_purge_after_days": 7
  },
  "sftp": {
    "host": "h1.example.internal",
    "port": 2022,
    "username": "alice"
  }
}
```

## 3.2 Jobs Retention 提示（新增）
为了支撑 WebUI 展示与用户预期管理，可在 `/api/v2/me` 或单独接口返回：
- `jobs_trash_after_days`：默认 3
- `jobs_purge_after_days`：默认 7
- `jobs_root`：`/private/users/<me>/jobs`
- `trash_jobs_root`：`/private/users/<me>/trash/jobs`
- `recommendations`：提示用户把需要长期保存的产物移动到 `models/` 或 `datasets/`

## 4) 数据浏览/下载（可选，v3.0 最小化）

说明：上传/下载主通道仍是 SFTP。  
WebUI 如果要提供“快速浏览/查看”，可实现只读接口（避免实现大文件上传/断点等复杂逻辑）。

### 4.1 列目录
`GET /api/v2/files?path=/private/users/alice`
- 权限：path 必须在 `/private/common/` 或 `/private/users/<me>/` 下
- 返回：文件列表（name/type/size/mtime）

### 4.2 下载文件（小文件为主）
`GET /api/v2/files:download?path=/private/users/alice/jobs/.../logs/...`
- 返回：流式下载
- 大文件仍建议走 SFTP

## 5) TaskSpec 路径校验升级（v3.0 关键）

v2.5：仅允许 `/private/common/...`  
v3.0：允许 `/private/common/...` 与 `/private/users/<me>/...`

应用字段（至少）：
- `train_file` / `val_file`
- `code_path`：仍仅允许 `/private/common/...`（v3.0 不支持执行用户 code）
- 本地模型路径字段（如果引入）：允许 `/private/users/<me>/models/...`

## 6) WebUI 路由（新增）

由 API server 托管：
- `GET /ui`：主页面
- `GET /ui/login`：token 登录页
- 静态资源：`/ui/static/...`

WebUI 的所有操作均调用同源 API（不额外开 CORS）。
