6.1 KiB
6.1 KiB
Updated Approval Flow Logic
🎯 Overview
Flow approval telah diubah sesuai permintaan untuk memberikan pengalaman yang lebih baik dalam proses revisi dan penolakan artikel.
🔄 Flow Behavior Changes
1. Approve Action
- ✅ Behavior: Tetap sama seperti sebelumnya
- ✅ Result: Naik ke step berikutnya atau selesai jika sudah step terakhir
- ✅ Status: Workflow berlanjut normal
2. Revision Action (Baru)
- ✅ Behavior: Mundur ke step awal (step 1) dengan status pending
- ✅ Result: Flow approval direset seperti belum berjalan
- ✅ Status:
StatusId = 1(pending) - ✅ Article Status:
StatusId = 1(draft),IsDraft = true - ✅ Restart: Ketika user melakukan update artikel, approval akan berjalan kembali dari step 1
3. Reject Action (Baru)
- ✅ Behavior: Mundur ke step awal (step 1) dengan status pending
- ✅ Result: Flow approval direset seperti belum berjalan
- ✅ Status:
StatusId = 1(pending) - ✅ Article Status:
StatusId = 1(draft),IsDraft = true - ✅ Restart: Ketika user melakukan update artikel, approval akan berjalan kembali dari step 1
📊 Database Changes
Article Approval Flows Table:
-- Untuk Revision Action
UPDATE article_approval_flows
SET current_step = 1,
status_id = 1, -- pending
revision_requested = true,
revision_message = 'message',
completed_at = NULL -- Reset completed_at
WHERE id = flow_id;
-- Untuk Reject Action
UPDATE article_approval_flows
SET current_step = 1,
status_id = 1, -- pending
revision_message = 'message',
completed_at = NULL -- Reset completed_at
WHERE id = flow_id;
Articles Table:
-- Untuk Revision & Reject Action
UPDATE articles
SET status_id = 1, -- draft
is_draft = true,
workflow_id = workflow_id, -- Keep workflow ID
current_approval_step = 1 -- Reset to step 1
WHERE id = article_id;
🎯 Action Types & Behavior Summary
| Action | Flow Behavior | Article Status | Restart Behavior |
|---|---|---|---|
approve |
Naik ke step berikutnya | Tetap dalam approval | Workflow berlanjut |
revision |
Reset ke step 1, status pending | Draft | Restart dari step 1 saat update |
reject |
Reset ke step 1, status pending | Draft | Restart dari step 1 saat update |
🚀 API Usage Examples
Revision Request:
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"action": "revision",
"message": "Please fix grammar and improve conclusion"
}'
Response:
{
"success": true,
"messages": ["Article successfully revision through active approval flow"],
"data": {
"article_id": 123,
"flow_id": 456,
"action": "revision",
"current_step": 1,
"current_branch": "Branch_A",
"workflow_id": 1
}
}
Reject Request:
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"action": "reject",
"message": "Content does not meet quality standards"
}'
Response:
{
"success": true,
"messages": ["Article successfully reject through active approval flow"],
"data": {
"article_id": 123,
"flow_id": 456,
"action": "reject",
"current_step": 1,
"current_branch": "Branch_A",
"workflow_id": 1
}
}
🔄 Restart Flow Logic
Ketika User Update Artikel:
- System Check: Apakah artikel memiliki
workflow_iddancurrent_approval_step = 1? - Auto Restart: Jika ya, approval flow akan berjalan kembali dari step 1
- Status Update: Artikel status berubah dari draft ke pending approval
- Flow Continuation: Approval flow berlanjut dengan step yang sudah direset
Implementation dalam Articles Service:
// Ketika artikel diupdate, check apakah perlu restart approval
if article.WorkflowId != nil && article.CurrentApprovalStep != nil && *article.CurrentApprovalStep == 1 {
// Restart approval flow
err := articleApprovalFlowsService.RestartApprovalFlow(article.ID)
if err != nil {
return err
}
}
📈 Benefits
1. Better User Experience
- ✅ User bisa melakukan revisi tanpa kehilangan progress workflow
- ✅ Reject tidak menghapus workflow, hanya reset
- ✅ Mudah untuk restart approval setelah update
2. Workflow Continuity
- ✅ Workflow ID tetap tersimpan untuk restart
- ✅ Tidak perlu membuat workflow baru
- ✅ History approval tetap tersimpan
3. Flexible Process
- ✅ User bisa update artikel dan approval otomatis restart
- ✅ Tidak ada duplikasi workflow
- ✅ Konsisten dengan business logic
🎯 Use Cases
Scenario 1: Revision Process
- Editor review artikel di step 2
- Editor request revision → Flow reset ke step 1, artikel jadi draft
- Author update artikel
- Approval flow restart otomatis dari step 1
- Editor review lagi dari awal
Scenario 2: Rejection Process
- Editor review artikel di step 2
- Editor reject artikel → Flow reset ke step 1, artikel jadi draft
- Author update artikel
- Approval flow restart otomatis dari step 1
- Editor review lagi dari awal
Scenario 3: Multiple Revisions
- Editor request revision → Reset ke step 1
- Author update → Restart approval
- Editor request revision lagi → Reset ke step 1 lagi
- Author update lagi → Restart approval lagi
- Proses bisa berulang sampai approved
🎉 Summary
Perubahan flow ini memberikan:
- ✅ Flexibility: User bisa melakukan revisi/reject tanpa kehilangan workflow
- ✅ Continuity: Workflow tidak terputus, hanya direset
- ✅ Auto Restart: Approval otomatis restart saat artikel diupdate
- ✅ Better UX: Proses yang lebih intuitif dan user-friendly
- ✅ Data Integrity: Workflow ID dan history tetap tersimpan
Sekarang sistem approval memberikan pengalaman yang lebih baik dengan flow yang lebih fleksibel! 🚀