8.2 KiB
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:
- Input:
{"action": "approve", "message": "..."} - Process: Menggunakan multi-branch approval logic
- Result: Article naik ke step berikutnya
- Status: Workflow berlanjut
Revision Flow:
- Input:
{"action": "revision", "message": "..."} - Process:
- Current step dikurangi 1
revision_requested= truerevision_message= message
- Result: Article kembali ke step sebelumnya
- Status: Workflow berlanjut tapi mundur 1 step
Reject Flow:
- Input:
{"action": "reject", "message": "..."} - Process:
- Flow status = rejected (3)
- Article status = draft (1)
is_draft= trueworkflow_id= nullcurrent_approval_step= null
- Result: Article dikembalikan ke draft
- Status: Workflow dihentikan
📊 Database Changes
Article Approval Flows Table:
revision_requested: Boolean flag untuk request updaterevision_message: Pesan untuk revisirejection_reason: Alasan penolakancompleted_at: Timestamp ketika workflow selesai
Articles Table:
status_id: 1 (draft), 2 (published), 3 (rejected)is_draft: Boolean flag untuk draft statusworkflow_id: Null ketika di-rejectcurrent_approval_step: Null ketika di-reject
Article Approval Step Logs Table:
action: "approve", "request_update", "reject"message: Pesan dari approveraction_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:
actionharus salah satu dari:approve,request_update,rejectactionadalah field required
Message Validation:
messageadalah 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
- Flexible Workflow: Support untuk berbagai jenis feedback
- Better User Experience: User bisa memberikan feedback yang lebih spesifik
- Improved Quality Control: Reject option untuk content yang tidak sesuai
- Revision Support: Revision untuk perbaikan tanpa menghentikan workflow
- 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. 🚀