fix(workflow): ADR-021 code review fixes (8 bugs)

- fix(transmittal): guard duplicate workflow instance on submit()
- fix(workflow-guard): add organizationId to context so Level-2 RBAC works
- fix(circulation): organizationId context passed relation object not INT FK
- fix(transmittal): require Idempotency-Key header on POST submit endpoint
- fix(workflow): userId non-optional in processTransition controller
- fix(circulation): auto-close counts PENDING and IN_PROGRESS tasks
- fix(transmittal): status badge uses workflowState/DRAFT not purpose field
- fix(workflow): log cache invalidation failures instead of swallowing
- fix(workflow): implement getAvailableActions endpoint stub
- fix(i18n): add removeFile key to EN/TH locales
This commit is contained in:
2026-04-17 16:25:51 +07:00
parent 3a5fc8d4af
commit 5977e48e38
10 changed files with 71 additions and 33 deletions
@@ -60,7 +60,9 @@ export default function TransmittalDetailPage() {
const transmittalDocNo = transmittal.correspondence?.correspondenceNumber ?? transmittal.transmittalNo ?? '';
const transmittalSubject = transmittal.subject ?? '';
const transmittalStatus = transmittal.purpose ?? '';
const transmittalStatus = transmittal.workflowInstanceId
? (transmittal.workflowState ?? 'SUBMITTED')
: 'DRAFT';
return (
<section className="space-y-4">
@@ -294,7 +294,7 @@ export function WorkflowLifecycle({
type="button"
className="ml-0.5 hover:text-destructive"
onClick={(e) => { e.stopPropagation(); removeUploadedFile(f.publicId); }}
aria-label={t('workflow.timeline.uploadError')}
aria-label={t('workflow.timeline.removeFile')}
>
<XIcon className="h-3 w-3" />
</button>
+1
View File
@@ -29,6 +29,7 @@
"workflow.timeline.uploading": "Uploading...",
"workflow.timeline.uploadTypes": "PDF, DOCX, XLSX, DWG, ZIP · Max 50 MB",
"workflow.timeline.uploadError": "Unable to upload",
"workflow.timeline.removeFile": "Remove file",
"filePreview.fallbackTitle": "File",
"filePreview.fileUnavailable": "File has been removed from storage.",
+1
View File
@@ -29,6 +29,7 @@
"workflow.timeline.uploading": "กำลังอัปโหลด...",
"workflow.timeline.uploadTypes": "PDF, DOCX, XLSX, DWG, ZIP · สูงสุด 50 MB",
"workflow.timeline.uploadError": "ไม่สามารถอัปโหลด",
"workflow.timeline.removeFile": "ลบไฟล์",
"filePreview.fallbackTitle": "ไฟล์",
"filePreview.fileUnavailable": "ไฟล์ถูกลบออกจาก Storage แล้ว",