kontenhumas-be/docs/ENHANCED_APPROVAL_ACTIONS_A...

287 lines
8.2 KiB
Markdown
Raw Normal View History

2025-10-01 21:17:11 +00:00
# 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**
```json
{
"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):**
```json
{
"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):**
```json
{
"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):**
```json
{
"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:**
```bash
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:**
```bash
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:**
```bash
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:**
```bash
# 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:**
```bash
# 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):**
```json
{
"success": false,
"messages": ["Validation failed: [Action must be one of: approve, request_update, reject]"]
}
```
### **No Active Flow (400):**
```json
{
"success": false,
"messages": ["No active approval flow found for this article"]
}
```
### **Unauthorized (401):**
```json
{
"success": false,
"messages": ["Invalid authorization token"]
}
```
## 🔄 **Migration from Old API**
### **Before (Only Approve):**
```bash
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):**
```bash
# 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. 🚀