# DesignerCEP 后端开发需求文档 请根据以下需求使用 Python (Flask/FastAPI) + MySQL 开发后端服务。 ## 1. 核心需求概览 我们需要实现一个 **“灰度发布系统”**。 - **用户与权限**: 用户属于不同的“组” (Group),如 "Stable Group", "Dev Group"。 - **版本控制**: 不同的组对应不同的插件版本 (ZIP 包)。 - **客户端交互**: 客户端插件 (Shell) 登录时,根据用户所在的组,返回对应的 ZIP 包下载地址。 --- ## 2. 数据库设计 (Database Schema) 请创建以下两张核心表(基于 MySQL): ### 2.1 用户组表 (`plugin_group`) 用于管理不同的发布通道。 | 字段名 | 类型 | 描述 | 示例值 | | :--------------------- | :------- | :----------------------- | :------------------ | | `id` | INT (PK) | 组 ID | 1 | | `name` | VARCHAR | 组名称 | "正式版用户组" | | `current_version_file` | VARCHAR | **当前使用的版本文件名** | "plugin_v1.0.2.zip" | | `comment` | TEXT | 备注 | "稳定版本通道" | ### 2.2 用户表 (`user`) _需关联到组表_ | 字段名 | 类型 | 描述 | 示例值 | | :------------ | :------- | :---------------------- | :------------------------- | | `id` | INT (PK) | 用户 ID | 1001 | | `username` | VARCHAR | 用户名 | "designer01" | | `password` | VARCHAR | 密码 | "123456" | | `group_id` | INT (FK) | **所属组 ID** | 1 (关联 `plugin_group.id`) | | `permissions` | TEXT | **权限列表** (逗号分隔) | "batch_process,vip_export" | | `expire_date` | DATETIME | **过期时间** | "2025-12-31 23:59:59" | --- ## 3. API 接口规范 (API Specification) 所有接口前缀建议为 `/api/v1`。 ### 3.1 检查更新 (Client 接口) 客户端插件启动时调用,查询自己应该下载哪个版本。 - **URL**: `POST /api/v1/client/check_update` - **请求参数**: `{ "username": "..." }` - **逻辑**: 1. 检查用户是否过期 (`expire_date` < user.expire_date). 如果过期,返回 403 或特定状态码。 2. 根据 `username` 查询用户所在的 `group_id`。 3. 根据 `group_id` 查询 `plugin_group` 表,获取 `current_version_file`。 4. 拼接下载链接。 - **返回示例**: ```json { "code": 200, "data": { "version": "v1.0.2", "download_url": "http://your-server.com/download/plugin_v1.0.2.zip", "force_update": false, "is_expired": false // 明确告知是否过期 }, "message": "success" } ``` ### 3.2 登录验证 (Client 接口) - **URL**: `POST /api/v1/client/login` - **请求参数**: `{ "username": "...", "password": "..." }` - **逻辑**: 校验密码及过期状态。 - **返回**: ```json { "code": 200, "data": { "token": "...", "username": "...", "expire_date": "2025-12-31", "permissions": ["batch_process", "vip_export"] // 返回权限数组 } } ``` ### 3.3 上传新版本 (Admin/CI 接口) 用于发布脚本上传新的 ZIP 包。 - **请求参数**: `file` (multipart/form-data) - **逻辑**: 1. 校验管理员权限(可硬编码 Token 或密码)。 2. 将上传的文件保存到服务器的 `archives/` 目录。 3. 文件名通常包含版本号或时间戳,如 `plugin_v1.0.3_20251216.zip`。 4. (可选) 自动更新相关数据库记录。 ### 3.4 文件下载 (Download) - **URL**: `GET /download/` - **功能**: 提供静态文件下载服务(指向 `archives/` 目录)。 --- ## 4. 后台管理功能 (Admin Tool 支持) 后端需要提供基础的数据增删改查接口,以支持 PyQt 或 Web 管理后台: 1. **用户管理**: 新增用户、修改用户所属组 (`group_id`)。 2. **组管理**: 修改组指向的版本 (`current_version_file`)。 - _场景_: 管理员发现 "v1.1-beta" 有 Bug,可以将 "Dev Group" 的 `current_version_file` 改回 "v1.0-stable",实现快速回滚。