674 lines
17 KiB
Markdown
674 lines
17 KiB
Markdown
# Multi-Branch Approval System - Curl Examples
|
|
|
|
## Setup dan Konfigurasi
|
|
|
|
### 1. Buat Multi-Branch Workflow
|
|
|
|
```bash
|
|
# Example 1: Simple Two-Branch Workflow
|
|
curl -X POST "http://localhost:8080/api/approval-workflows/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"name": "Simple Two-Branch Approval",
|
|
"description": "Workflow dengan 2 cabang berdasarkan user level",
|
|
"isActive": true,
|
|
"isDefault": false,
|
|
"requiresApproval": true,
|
|
"autoPublish": false,
|
|
"steps": [
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Branch A - Level 2",
|
|
"requiredUserLevelId": 2,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [4,5,6]}",
|
|
"branchName": "Branch_A",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Branch B - Level 3",
|
|
"requiredUserLevelId": 3,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [7,8,9]}",
|
|
"branchName": "Branch_B",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 2,
|
|
"stepName": "Final Approval",
|
|
"requiredUserLevelId": 1,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "always",
|
|
"branchName": "Final",
|
|
"branchOrder": 1
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
|
|
### 2. Complex Multi-Level Branching
|
|
|
|
```bash
|
|
# Example 2: Complex Multi-Level Branching
|
|
curl -X POST "http://localhost:8080/api/approval-workflows/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"name": "Complex Multi-Level Branching",
|
|
"description": "Workflow dengan multiple level branching",
|
|
"isActive": true,
|
|
"isDefault": false,
|
|
"requiresApproval": true,
|
|
"autoPublish": false,
|
|
"steps": [
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Level 2 Branch",
|
|
"requiredUserLevelId": 2,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [4,5,6,7,8,9]}",
|
|
"branchName": "Branch_A",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Level 3 Branch",
|
|
"requiredUserLevelId": 3,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [10,11,12,13,14,15]}",
|
|
"branchName": "Branch_B",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 2,
|
|
"stepName": "Sub-branch A1",
|
|
"requiredUserLevelId": 4,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [4,5,6]}",
|
|
"branchName": "SubBranch_A1",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 2,
|
|
"stepName": "Sub-branch A2",
|
|
"requiredUserLevelId": 5,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [7,8,9]}",
|
|
"branchName": "SubBranch_A2",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 3,
|
|
"stepName": "Level 1 Final Approval",
|
|
"requiredUserLevelId": 1,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "always",
|
|
"branchName": "Final_Approval",
|
|
"branchOrder": 1
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
|
|
### 3. Workflow dengan Specific User Levels
|
|
|
|
```bash
|
|
# Example 3: Workflow untuk specific user levels
|
|
curl -X POST "http://localhost:8080/api/approval-workflows/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"name": "Specific User Level Workflow",
|
|
"description": "Workflow untuk user level tertentu",
|
|
"isActive": true,
|
|
"isDefault": false,
|
|
"requiresApproval": true,
|
|
"autoPublish": false,
|
|
"steps": [
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Level 2 Approval",
|
|
"requiredUserLevelId": 2,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level",
|
|
"conditionValue": "[4,5,6]",
|
|
"branchName": "Level2_Branch",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Level 3 Approval",
|
|
"requiredUserLevelId": 3,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level",
|
|
"conditionValue": "[7,8,9]",
|
|
"branchName": "Level3_Branch",
|
|
"branchOrder": 1
|
|
},
|
|
{
|
|
"stepOrder": 2,
|
|
"stepName": "Final Approval",
|
|
"requiredUserLevelId": 1,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "always",
|
|
"branchName": "Final",
|
|
"branchOrder": 1
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
|
|
## Workflow Management
|
|
|
|
### 1. Get All Workflows
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/approval-workflows" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 2. Get Workflow dengan Steps
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/approval-workflows/1/with-steps" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 3. Update Workflow
|
|
|
|
```bash
|
|
curl -X PUT "http://localhost:8080/api/approval-workflows/1/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"name": "Updated Multi-Branch Workflow",
|
|
"description": "Updated description",
|
|
"isActive": true,
|
|
"isDefault": false,
|
|
"requiresApproval": true,
|
|
"autoPublish": false,
|
|
"steps": [
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Updated Step",
|
|
"requiredUserLevelId": 2,
|
|
"canSkip": false,
|
|
"isActive": true,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "{\"applies_to_levels\": [4,5,6]}",
|
|
"branchName": "Updated_Branch",
|
|
"branchOrder": 1
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
|
|
### 4. Activate/Deactivate Workflow
|
|
|
|
```bash
|
|
# Activate workflow
|
|
curl -X PUT "http://localhost:8080/api/approval-workflows/1/activate" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
|
|
# Deactivate workflow
|
|
curl -X PUT "http://localhost:8080/api/approval-workflows/1/deactivate" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
## Article Approval Flow
|
|
|
|
### 1. Submit Article untuk Approval
|
|
|
|
```bash
|
|
# Submit artikel dengan workflow ID tertentu
|
|
curl -X POST "http://localhost:8080/api/articles/123/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
|
|
# Submit artikel dengan default workflow
|
|
curl -X POST "http://localhost:8080/api/articles/123/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{}'
|
|
```
|
|
|
|
### 2. Process Multi-Branch Approval
|
|
|
|
```bash
|
|
# Approve dengan multi-branch logic
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"message": "Article looks good, approved for next level"
|
|
}'
|
|
|
|
# Approve dengan message yang berbeda
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"message": "Content is excellent, proceeding to final approval"
|
|
}'
|
|
```
|
|
|
|
### 3. Get Next Steps Preview
|
|
|
|
```bash
|
|
# Get preview next steps
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/456/next-steps-preview" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 4. Traditional Approval (untuk backward compatibility)
|
|
|
|
```bash
|
|
# Approve dengan method traditional
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"message": "Approved using traditional method"
|
|
}'
|
|
```
|
|
|
|
### 5. Reject Article
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/reject" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"reason": "Content needs improvement"
|
|
}'
|
|
```
|
|
|
|
### 6. Request Revision
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/request-revision" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"revisionMessage": "Please improve the introduction section"
|
|
}'
|
|
```
|
|
|
|
### 7. Resubmit After Revision
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/resubmit" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
## Monitoring dan Analytics
|
|
|
|
### 1. Get Approval History
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/articles/123/approval-history" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 2. Get My Approval Queue
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/my-queue" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 3. Get Pending Approvals
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/pending-approvals" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 4. Get Dashboard Statistics
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/dashboard-stats" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
### 5. Get Workload Statistics
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/workload-stats" \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
## Testing Scenarios
|
|
|
|
### Scenario 1: User Level 5 Submit Article
|
|
|
|
```bash
|
|
# 1. Submit artikel dari user level 5
|
|
curl -X POST "http://localhost:8080/api/articles/123/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer USER_LEVEL_5_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
|
|
# 2. Check next steps preview
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/456/next-steps-preview" \
|
|
-H "Authorization: Bearer USER_LEVEL_5_TOKEN"
|
|
|
|
# 3. Approve dengan multi-branch logic
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_2_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Approved by Level 2 approver"
|
|
}'
|
|
|
|
# 4. Final approval
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/456/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_1_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Final approval completed"
|
|
}'
|
|
```
|
|
|
|
### Scenario 2: User Level 8 Submit Article
|
|
|
|
```bash
|
|
# 1. Submit artikel dari user level 8
|
|
curl -X POST "http://localhost:8080/api/articles/124/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer USER_LEVEL_8_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
|
|
# 2. Check next steps preview (should show different branch)
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/457/next-steps-preview" \
|
|
-H "Authorization: Bearer USER_LEVEL_8_TOKEN"
|
|
|
|
# 3. Approve dengan multi-branch logic
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/457/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_3_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Approved by Level 3 approver"
|
|
}'
|
|
|
|
# 4. Final approval
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/457/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_1_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Final approval completed"
|
|
}'
|
|
```
|
|
|
|
### Scenario 3: User Level 12 Submit Article
|
|
|
|
```bash
|
|
# 1. Submit artikel dari user level 12
|
|
curl -X POST "http://localhost:8080/api/articles/125/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer USER_LEVEL_12_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
|
|
# 2. Check next steps preview (should show Branch B)
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/458/next-steps-preview" \
|
|
-H "Authorization: Bearer USER_LEVEL_12_TOKEN"
|
|
|
|
# 3. Approve dengan multi-branch logic
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/458/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_3_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Approved by Level 3 approver for Branch B"
|
|
}'
|
|
|
|
# 4. Final approval
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/458/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer LEVEL_1_APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Final approval completed"
|
|
}'
|
|
```
|
|
|
|
## Error Handling Examples
|
|
|
|
### 1. Invalid Workflow ID
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/articles/123/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"workflowId": 999
|
|
}'
|
|
```
|
|
|
|
**Expected Response**:
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Workflow not found"],
|
|
"error": "WORKFLOW_NOT_FOUND"
|
|
}
|
|
```
|
|
|
|
### 2. Invalid Condition Value
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8080/api/approval-workflows/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"name": "Invalid Workflow",
|
|
"description": "Workflow dengan invalid condition",
|
|
"steps": [
|
|
{
|
|
"stepOrder": 1,
|
|
"stepName": "Invalid Step",
|
|
"requiredUserLevelId": 2,
|
|
"conditionType": "user_level_hierarchy",
|
|
"conditionValue": "invalid json",
|
|
"branchName": "Invalid_Branch"
|
|
}
|
|
]
|
|
}'
|
|
```
|
|
|
|
**Expected Response**:
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Invalid condition value format"],
|
|
"error": "CONDITION_VALUE_INVALID"
|
|
}
|
|
```
|
|
|
|
### 3. No Applicable Steps
|
|
|
|
```bash
|
|
# Submit artikel dari user level yang tidak ada di condition
|
|
curl -X POST "http://localhost:8080/api/articles/123/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer USER_LEVEL_99_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
```
|
|
|
|
**Expected Response**:
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["No applicable steps found for this user level"],
|
|
"error": "NO_APPLICABLE_STEPS"
|
|
}
|
|
```
|
|
|
|
## Performance Testing
|
|
|
|
### 1. Load Testing dengan Multiple Submissions
|
|
|
|
```bash
|
|
# Script untuk test multiple submissions
|
|
for i in {1..100}; do
|
|
curl -X POST "http://localhost:8080/api/articles/$i/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}' &
|
|
done
|
|
wait
|
|
```
|
|
|
|
### 2. Concurrent Approval Testing
|
|
|
|
```bash
|
|
# Script untuk test concurrent approvals
|
|
for i in {1..50}; do
|
|
curl -X POST "http://localhost:8080/api/article-approval-flows/$i/multi-branch-approve" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer APPROVER_TOKEN" \
|
|
-d '{
|
|
"message": "Concurrent approval test"
|
|
}' &
|
|
done
|
|
wait
|
|
```
|
|
|
|
## Debugging Commands
|
|
|
|
### 1. Check Workflow Steps
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/approval-workflows/1/with-steps" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" | jq '.'
|
|
```
|
|
|
|
### 2. Check User Level
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/users/123" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" | jq '.data.user_levels'
|
|
```
|
|
|
|
### 3. Check Approval Flow Status
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/456" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" | jq '.'
|
|
```
|
|
|
|
### 4. Check Next Steps Preview
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8080/api/article-approval-flows/456/next-steps-preview" \
|
|
-H "Authorization: Bearer YOUR_TOKEN" | jq '.'
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```bash
|
|
# Set environment variables untuk testing
|
|
export API_BASE_URL="http://localhost:8080"
|
|
export ADMIN_TOKEN="your_admin_token_here"
|
|
export USER_LEVEL_5_TOKEN="your_user_level_5_token_here"
|
|
export USER_LEVEL_8_TOKEN="your_user_level_8_token_here"
|
|
export USER_LEVEL_12_TOKEN="your_user_level_12_token_here"
|
|
export LEVEL_1_APPROVER_TOKEN="your_level_1_approver_token_here"
|
|
export LEVEL_2_APPROVER_TOKEN="your_level_2_approver_token_here"
|
|
export LEVEL_3_APPROVER_TOKEN="your_level_3_approver_token_here"
|
|
```
|
|
|
|
## Batch Operations
|
|
|
|
### 1. Create Multiple Workflows
|
|
|
|
```bash
|
|
# Script untuk create multiple workflows
|
|
for i in {1..5}; do
|
|
curl -X POST "$API_BASE_URL/api/approval-workflows/with-steps" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-d "{
|
|
\"name\": \"Workflow $i\",
|
|
\"description\": \"Test workflow $i\",
|
|
\"isActive\": true,
|
|
\"steps\": [
|
|
{
|
|
\"stepOrder\": 1,
|
|
\"stepName\": \"Step 1\",
|
|
\"requiredUserLevelId\": 2,
|
|
\"conditionType\": \"always\",
|
|
\"branchName\": \"Branch_$i\"
|
|
}
|
|
]
|
|
}"
|
|
done
|
|
```
|
|
|
|
### 2. Submit Multiple Articles
|
|
|
|
```bash
|
|
# Script untuk submit multiple articles
|
|
for i in {1..10}; do
|
|
curl -X POST "$API_BASE_URL/api/articles/$i/submit-approval" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $USER_LEVEL_5_TOKEN" \
|
|
-d '{
|
|
"workflowId": 1
|
|
}'
|
|
done
|
|
```
|
|
|
|
## Monitoring Commands
|
|
|
|
### 1. Check System Health
|
|
|
|
```bash
|
|
curl -X GET "$API_BASE_URL/health" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN"
|
|
```
|
|
|
|
### 2. Get System Statistics
|
|
|
|
```bash
|
|
curl -X GET "$API_BASE_URL/api/article-approval-flows/dashboard-stats" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" | jq '.'
|
|
```
|
|
|
|
### 3. Check Workflow Performance
|
|
|
|
```bash
|
|
curl -X GET "$API_BASE_URL/api/approval-workflows" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" | jq '.data | length'
|
|
```
|