Tóm tắt
PATCH /workflow-tasks/:id với body chỉ có fieldValues trả 404 common.entity_not_found ("WorkflowTask
not found") dù task tồn tại, và giá trị field đã được ghi vào DB. Client nhận lỗi cho một thao tác thực ra
đã thành công một phần. Backlog BE: WORKFLOW-022.
Chi tiết
Tái hiện trên localhost:3003 (2026-09-24), task đang active, được tạo kèm giá trị cho field <f>:
POST /workflows/:wf/tasks { "name": "debug", "fieldValues": [{ "fieldId": "<f>", "value": "x" }] } → 201
PATCH /workflow-tasks/:id { "fieldValues": [{ "fieldId": "<f>", "value": "y" }] } → 404
{"statusCode":404,"code":"common.entity_not_found","message":"WorkflowTask not found: <id>", ...}
PATCH /workflow-tasks/:id { "name": "debug", "fieldValues": [{ "fieldId": "<f>", "value": "y" }] } → 200
- Mong đợi: 200 kèm task, giá trị field được cập nhật.
- Thực tế: 404, nhưng giá trị field vẫn đã đổi thành
y.
Nguyên nhân (đọc source): UpdateTaskUseCase ghi fieldValues trước rồi luôn gọi
taskRepository.update(taskId, changes) với changes = {}. Từ bản vá WORKFLOW-020,
PrismaWorkflowTaskRepository.update dùng updateMany + ném not-found khi count === 0, mà Prisma trả
count: 0 khi data rỗng. Ghi field và update task không nằm trong UnitOfWork nên không rollback.
Contract (trước → sau)
| Trước (hiện tại) | Sau (mong muốn) | |
|---|---|---|
| Endpoint | PATCH /workflow-tasks/:id |
không đổi |
| Request | { fieldValues: [{ fieldId, value }] } |
không đổi |
| Response | 404 common.entity_not_found (giá trị vẫn được ghi) |
200 { data: WorkflowTask } |
| Lỗi | — | task không tồn tại / khác tổ chức vẫn 404, và không ghi giá trị nào |
Việc bên nhận cần làm
- BE: sửa theo WORKFLOW-022 — bỏ qua
updateManykhichangesrỗng (hoặc chỉ gọiupdatekhi có thay đổi), bọc ghi field + update task trong UnitOfWork, thêm test. - BE: rà các repository đã vá theo pattern
updateMany+ kiểm tracount(IDENTITY-022, WEWORK-025) xem có cùng lỗi khidatarỗng không. - FE (sau khi BE
applied): bỏ workaround gửi kèmnametrongFieldValuesOverwrite(frontend/src/modules/workflow/components/WorkflowTaskDetailPanel.tsx).
Cách kiểm tra
Chạy lại 2 request đầu ở mục "Chi tiết": PATCH chỉ có fieldValues phải trả 200. Trên UI: mở 1 nhiệm vụ
trong /workflow/definitions/:id, nhập 1 trường ở mục "Trường thông tin", bấm "Cập nhật giá trị" → toast
thành công (sau khi FE bỏ workaround).
Thảo luận
[FE] 2026-09-24 @NinelXram — raised
FE đang workaround bằng cách gửi kèm name hiện tại trong PATCH (PR-47). Mobile n/a: mobile/ chưa có code.
[BE] 2026-09-24 @ThaiThanhLuan — applied
Sửa ở WORKFLOW-022 (nhánh fix/WORKFLOW-022-task-patch-fieldvalues-only-404): PATCH /workflow-tasks/:id chỉ có
fieldValues hoặc body rỗng giờ trả 200 kèm task; ghi field + update task chạy trong 1 UnitOfWork; task khác tổ
chức vẫn 404 và không ghi gì. Cùng lỗi body rỗng → 404 ở update job và update step checklist item cũng đã sửa.
IDENTITY/WEWORK không có pattern changes = {} nên không bị. FE có thể bỏ workaround gửi kèm name.