所有云函数遵循同一套约定(参考 docs/云函数/筷子一键成片.json):
CREATE TABLE "<ResourceName>" (
"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。
| 字段 | 说明 |
|---|---|
action |
操作类型(list/get/create/update/delete/...) |
id 或业务字段 |
操作目标 |
| 其它 | 透传到 data 字段 |
// 成功
{ "code": 200, "success": true, "data": ... }
// 失败
{ "code": 400, "success": false, "error": "..." }
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;
}