Job 留言目前是透過 public.element_variables, name = 'comment' 儲存,現在要將此功能獨立拆出成專屬資料表, 以便後續查詢、管理與顯示留言紀錄。
請先找到目前PUT api/1.0/flow-engine/task/comments/:task_uid 儲存留言的相關程式碼,理解: 程式路徑:api/flow_engine/routes/flow_engine_route.py JobCommentsRoute.put 目標:
請依照現有專案的 schema 慣例決定放置的 schema,並建立以下資料表: Schema 名稱:compliance Table 名稱:job_execution_comments
| 欄位 | 型別 | 說明 |
|---|---|---|
| id | SERIAL / BIGSERIAL | 主鍵,auto increment |
| uid | UUID | 唯一識別碼,對外使用(API 傳遞用) |
| job_execution_id | UUID / FK | 關聯對應的 job execution |
| author_id | UUID | FK -> public.users.id,留言者帳號 |
| author_nickname | VARCHAR | 留言當下的使用者名稱(快照,防止改名或停用後資料遺失) |
| content | TEXT | 留言內文 |
| created_at | TIMESTAMPTZ | 建立時間 |
| updated_at | TIMESTAMPTZ | 更新時間 |
id:內部使用,auto increment,不對外暴露uid:對外識別用(API request / response 統一使用 uid),建立時自動產生author_id 與 author_nickname 並存:
author_id:用於關聯查詢(頭像、個人資料)author_nickname:快照當下姓名,user 停用或改名後歷史留言仍可正確顯示author_nicknameSQLAlchemy 2.0 Model
Alembic Migration
job_execution_comments tableRepository & Service
API Endpoints
uid,不暴露 idGET /api/1.0/grc/job-executions/<job_execution_uid>/comments — 取得留言清單(複數:清單操作)POST /api/1.0/grc/job-executions/<job_execution_uid>/comments — 新增留言(複數:collection 操作)PUT /api/1.0/grc/job/comment/<uid> — 編輯留言(僅限本人)(單數:單筆操作)DELETE /api/1.0/grc/job/comment/<uid> — 刪除留言(僅限本人,hard delete)(單數:單筆操作)| 欄位 | 型別 | 說明 |
|---|---|---|
uid |
string | 留言 UID(對外識別) |
author_uid |
string | null | 留言者 user UID(user 停用後可能為 null) |
author_name |
string | 顯示名稱(優先用 user.nickname,fallback 至 author_nickname) |
author_nickname |
string | 留言當下名稱快照 |
content |
string | 留言內文 |
created_at |
string | 建立時間(YYYY-MM-DD HH:mm:ss) |
updated_at |
string | 更新時間(YYYY-MM-DD HH:mm:ss) |
{
"status": true,
"data": [
{
"uid": "550e8400-e29b-41d4-a716-446655440001",
"author_uid": "9d895dc8-e189-4ed6-a830-a9e468a00a04",
"author_name": "Alice Chen",
"author_nickname": "Alice Chen",
"content": "已上傳截圖,請確認。",
"created_at": "2026-03-02 10:00:00",
"updated_at": "2026-03-02 10:00:00"
}
]
}author_nickname、author_uid 在新增留言時由後端自動從 user 資料寫入,前端不需傳入id,一律以 uid 作為資源識別