kontenhumas-be/docs/ENHANCED_APPROVAL_ACTIONS_A...

8.2 KiB

Enhanced Approval Actions API

🚀 Overview

API ini telah ditingkatkan untuk mendukung 3 jenis action approval yang berbeda: Approve, Request Update, dan Reject. Setiap action memiliki behavior yang berbeda sesuai dengan kebutuhan workflow.

📋 Endpoint

POST /api/article-approval-flows/articles/{articleId}/approve

🔧 Request Body

{
  "action": "approve",
  "message": "Content looks good, approved for next level"
}

📝 Action Types

1. Approve (approve)

  • Behavior: Naik ke step berikutnya dalam workflow
  • Use Case: Content sudah sesuai dan siap untuk step selanjutnya
  • Result: Article akan diproses menggunakan multi-branch logic

2. Revision (revision)

  • Behavior: Mundur 1 step dalam workflow
  • Use Case: Content perlu diperbaiki tapi masih bisa diperbaiki
  • Result: Article akan kembali ke step sebelumnya untuk revisi

3. Reject (reject)

  • Behavior: Balik ke status Draft
  • Use Case: Content tidak sesuai dan perlu dibuat ulang
  • Result: Article akan dikembalikan ke status draft dan workflow dihentikan

📤 Response Examples

Approve Response (200):

{
  "success": true,
  "messages": ["Article successfully approve through active approval flow"],
  "data": {
    "article_id": 123,
    "flow_id": 456,
    "action": "approve",
    "current_step": 2,
    "current_branch": "Branch_A",
    "workflow_id": 1
  }
}

Revision Response (200):

{
  "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 Response (200):

{
  "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
  }
}

🧪 Curl Examples

1. Approve Article:

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": "approve",
    "message": "Content reviewed and approved. Ready for next level."
  }'

2. Request Revision:

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 the grammar and improve the conclusion section."
  }'

3. Reject Article:

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 our quality standards. Please rewrite the entire article."
  }'

🔄 Workflow Behavior

Approve Flow:

  1. Input: {"action": "approve", "message": "..."}
  2. Process: Menggunakan multi-branch approval logic
  3. Result: Article naik ke step berikutnya
  4. Status: Workflow berlanjut

Revision Flow:

  1. Input: {"action": "revision", "message": "..."}
  2. Process:
    • Current step dikurangi 1
    • revision_requested = true
    • revision_message = message
  3. Result: Article kembali ke step sebelumnya
  4. Status: Workflow berlanjut tapi mundur 1 step

Reject Flow:

  1. Input: {"action": "reject", "message": "..."}
  2. Process:
    • Flow status = rejected (3)
    • Article status = draft (1)
    • is_draft = true
    • workflow_id = null
    • current_approval_step = null
  3. Result: Article dikembalikan ke draft
  4. Status: Workflow dihentikan

📊 Database Changes

Article Approval Flows Table:

  • revision_requested: Boolean flag untuk request update
  • revision_message: Pesan untuk revisi
  • rejection_reason: Alasan penolakan
  • completed_at: Timestamp ketika workflow selesai

Articles Table:

  • status_id: 1 (draft), 2 (published), 3 (rejected)
  • is_draft: Boolean flag untuk draft status
  • workflow_id: Null ketika di-reject
  • current_approval_step: Null ketika di-reject

Article Approval Step Logs Table:

  • action: "approve", "request_update", "reject"
  • message: Pesan dari approver
  • action_by_id: ID user yang melakukan action

🎯 Use Cases

1. Content Review Process:

# Step 1: Editor review
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer EDITOR_TOKEN" \
  -d '{"action": "approve", "message": "Content is good"}'

# Step 2: Senior Editor review
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SENIOR_EDITOR_TOKEN" \
  -d '{"action": "request_update", "message": "Please add more examples"}'

# Step 3: After revision, approve again
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SENIOR_EDITOR_TOKEN" \
  -d '{"action": "approve", "message": "Much better now"}'

2. Quality Control Process:

# Quality check fails
curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer QUALITY_CHECKER_TOKEN" \
  -d '{"action": "reject", "message": "Content does not meet quality standards"}'

🔒 Validation Rules

Action Validation:

  • action harus salah satu dari: approve, request_update, reject
  • action adalah field required

Message Validation:

  • message adalah optional
  • Jika ada, akan disimpan dalam step log

Authorization Validation:

  • User harus memiliki permission untuk approve
  • User level harus sesuai dengan step yang sedang berjalan

🚨 Error Handling

Invalid Action (400):

{
  "success": false,
  "messages": ["Validation failed: [Action must be one of: approve, request_update, reject]"]
}

No Active Flow (400):

{
  "success": false,
  "messages": ["No active approval flow found for this article"]
}

Unauthorized (401):

{
  "success": false,
  "messages": ["Invalid authorization token"]
}

🔄 Migration from Old API

Before (Only Approve):

curl -X POST "http://localhost:8080/api/article-approval-flows/articles/123/approve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"message": "Approved"}'

After (3 Actions):

# Approve
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": "approve", "message": "Approved"}'

# Revision
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"}'

# Reject
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 not suitable"}'

🎉 Benefits

  1. Flexible Workflow: Support untuk berbagai jenis feedback
  2. Better User Experience: User bisa memberikan feedback yang lebih spesifik
  3. Improved Quality Control: Reject option untuk content yang tidak sesuai
  4. Revision Support: Revision untuk perbaikan tanpa menghentikan workflow
  5. Audit Trail: Semua action dicatat dalam step logs

🎉 Enhanced Approval Actions API memberikan kontrol yang lebih baik atas workflow approval dengan 3 pilihan action yang berbeda!

Sekarang approver bisa memilih apakah akan approve, revision, atau reject artikel dengan behavior yang sesuai untuk setiap pilihan. 🚀