kontenhumas-be/docs/UPDATED_APPROVAL_FLOW_LOGIC.md

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:

  1. System Check: Apakah artikel memiliki workflow_id dan current_approval_step = 1?
  2. Auto Restart: Jika ya, approval flow akan berjalan kembali dari step 1
  3. Status Update: Artikel status berubah dari draft ke pending approval
  4. 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

  1. Editor review artikel di step 2
  2. Editor request revision → Flow reset ke step 1, artikel jadi draft
  3. Author update artikel
  4. Approval flow restart otomatis dari step 1
  5. Editor review lagi dari awal

Scenario 2: Rejection Process

  1. Editor review artikel di step 2
  2. Editor reject artikel → Flow reset ke step 1, artikel jadi draft
  3. Author update artikel
  4. Approval flow restart otomatis dari step 1
  5. Editor review lagi dari awal

Scenario 3: Multiple Revisions

  1. Editor request revision → Reset ke step 1
  2. Author update → Restart approval
  3. Editor request revision lagi → Reset ke step 1 lagi
  4. Author update lagi → Restart approval lagi
  5. Proses bisa berulang sampai approved

🎉 Summary

Perubahan flow ini memberikan:

  1. Flexibility: User bisa melakukan revisi/reject tanpa kehilangan workflow
  2. Continuity: Workflow tidak terputus, hanya direset
  3. Auto Restart: Approval otomatis restart saat artikel diupdate
  4. Better UX: Proses yang lebih intuitif dan user-friendly
  5. Data Integrity: Workflow ID dan history tetap tersimpan

Sekarang sistem approval memberikan pengalaman yang lebih baik dengan flow yang lebih fleksibel! 🚀