sync/workflow/2026-09-24-fe-workflow-task-patch-fieldvalues-404.md · Xem trên GitHub

PATCH /workflow-tasks/:id chỉ có fieldValues trả 404 dù đã ghi giá trị

Đã đóng normal bug-report
Module
workflow
Từ
FE
Người raise
NinelXram
Ngày tạo
2026-09-24
Refs
WORKFLOW-022, WORKFLOW-020, WORKFLOW-FE-003, PR-47
Bên nhận
BE appliedMobile n/a

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 updateMany khi changes rỗng (hoặc chỉ gọi update khi 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 tra count (IDENTITY-022, WEWORK-025) xem có cùng lỗi khi data rỗng không.
  • FE (sau khi BE applied): bỏ workaround gửi kèm name trong FieldValuesOverwrite (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.