Fix test failures and workload/websocket behavior
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
## Context
|
||||
需要支援 Trigger 複合條件(AND-only)、群組通知目標,以及「手動訂閱」的週報收件人規則,並同步更新前端操作介面。
|
||||
|
||||
## Goals / Non-Goals
|
||||
- Goals:
|
||||
- 支援多條件 AND-only 觸發器條件
|
||||
- 支援 `due_date`/`start_date`/`custom_fields`(含 formula)與 `before/after/in` 運算子
|
||||
- 支援群組通知目標與去重、排除觸發者
|
||||
- 週報改為手動訂閱且收件人為專案成員(含跨部門)
|
||||
- 前端同版支援條件編輯與訂閱開關
|
||||
- Non-Goals:
|
||||
- 不實作 OR/巢狀條件樹
|
||||
- 不新增 Email 通知通道
|
||||
- 不改動排程時間(維持週五 16:00)
|
||||
|
||||
## Decisions
|
||||
- 條件結構
|
||||
- `field_change` 觸發器支援兩種條件格式:
|
||||
- Legacy: `{ field, operator, value }`
|
||||
- Composite: `{ logic: "and", rules: [ { field, operator, value, field_id? } ] }`
|
||||
- `in` 在日期欄位採 `{ start, end }`,且包含邊界。
|
||||
- `in` 在文字/下拉/人員欄位採用陣列值。
|
||||
- `before/after` 用於日期欄位;`before/after` 也可用於數值類(number/formula)。
|
||||
- 觸發時機
|
||||
- 觸發器於任務/自訂欄位更新時評估。
|
||||
- 規則需同時滿足且至少有一個規則所屬欄位在此次更新中變更,避免無關更新重複觸發。
|
||||
- 通知目標解析
|
||||
- 支援 `assignee`/`creator`/`project_owner`/`project_members`/`department:<id>`/`role:<name>`/`user:<id>`。
|
||||
- `project_members` 包含 owner。
|
||||
- `department`/`role` 解析為組織內所有符合的使用者。
|
||||
- 排除觸發者本人並對收件人去重。
|
||||
- 週報訂閱
|
||||
- 使用 `pjctrl_scheduled_reports` 作為訂閱資料;一位使用者一筆 weekly 訂閱。
|
||||
- 週報僅發送給已訂閱使用者。
|
||||
- 週報內容包含使用者為 owner 或 project member 的所有專案。
|
||||
|
||||
## Risks / Trade-offs
|
||||
- `department`/`role` 可能觸及非專案成員,需確保用戶理解通知範圍。
|
||||
- 自訂欄位(formula)計算可能帶來額外成本,需避免 N+1 查詢。
|
||||
|
||||
## Migration Plan
|
||||
- 無資料庫 schema 變更。
|
||||
|
||||
## Open Questions
|
||||
- 無(已確認 AND-only、日期區間 inclusive、role 自由輸入)。
|
||||
Reference in New Issue
Block a user