# 云函数统一设计约定 所有云函数遵循同一套约定(参考 `docs/云函数/筷子一键成片.json`): ## 1. 统一表结构 ```sql CREATE TABLE "" ( "objectId" VARCHAR(50) PRIMARY KEY, -- 10位随机ID(云函数生成) "bizId" VARCHAR(255), -- 业务ID(原 video.id / task.id ...) "data" JSONB NOT NULL DEFAULT '{}', -- 完整业务字段(保留原 JSON 结构) "userId" VARCHAR(255) DEFAULT '', -- 用户隔离(可选) "status" VARCHAR(50) DEFAULT '', -- 常用筛选字段 "type" VARCHAR(50) DEFAULT '', -- 常用筛选字段 "createdAt" TIMESTAMPTZ DEFAULT NOW(), "updatedAt" TIMESTAMPTZ DEFAULT NOW() ) ``` 为常用字段建索引:`bizId` (UNIQUE)、`userId`、`status`、`type`、`createdAt`。 ## 2. 统一调用约定 | 字段 | 说明 | |---|---| | `action` | 操作类型(list/get/create/update/delete/...) | | `id` 或业务字段 | 操作目标 | | 其它 | 透传到 `data` 字段 | ## 3. 统一响应格式 ```json // 成功 { "code": 200, "success": true, "data": ... } // 失败 { "code": 400, "success": false, "error": "..." } ``` ## 4. 公共工具函数(每个云函数都拷贝一份) ```javascript function generateId() { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let s = ''; for (let i = 0; i < 10; i++) s += chars.charAt(Math.floor(Math.random() * chars.length)); return s; } function pickParam(request, ...names) { const sources = [request.params, request.body, request]; for (const src of sources) { if (!src || typeof src !== 'object') continue; for (const n of names) { if (src[n] !== undefined && src[n] !== null && src[n] !== '') return src[n]; } } return null; } ```