kontenhumas-be/docs/MULTI_BRANCH_CURL_EXAMPLES.md

17 KiB

Multi-Branch Approval System - Curl Examples

Setup dan Konfigurasi

1. Buat Multi-Branch Workflow

# 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

# 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

# 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

curl -X GET "http://localhost:8080/api/approval-workflows" \
  -H "Authorization: Bearer YOUR_TOKEN"

2. Get Workflow dengan Steps

curl -X GET "http://localhost:8080/api/approval-workflows/1/with-steps" \
  -H "Authorization: Bearer YOUR_TOKEN"

3. Update Workflow

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

# 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

# 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

# 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

# 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)

# 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

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

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

curl -X POST "http://localhost:8080/api/article-approval-flows/456/resubmit" \
  -H "Authorization: Bearer YOUR_TOKEN"

Monitoring dan Analytics

1. Get Approval History

curl -X GET "http://localhost:8080/api/articles/123/approval-history" \
  -H "Authorization: Bearer YOUR_TOKEN"

2. Get My Approval Queue

curl -X GET "http://localhost:8080/api/article-approval-flows/my-queue" \
  -H "Authorization: Bearer YOUR_TOKEN"

3. Get Pending Approvals

curl -X GET "http://localhost:8080/api/article-approval-flows/pending-approvals" \
  -H "Authorization: Bearer YOUR_TOKEN"

4. Get Dashboard Statistics

curl -X GET "http://localhost:8080/api/article-approval-flows/dashboard-stats" \
  -H "Authorization: Bearer YOUR_TOKEN"

5. Get Workload Statistics

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

# 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

# 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

# 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

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:

{
  "success": false,
  "messages": ["Workflow not found"],
  "error": "WORKFLOW_NOT_FOUND"
}

2. Invalid Condition Value

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:

{
  "success": false,
  "messages": ["Invalid condition value format"],
  "error": "CONDITION_VALUE_INVALID"
}

3. No Applicable Steps

# 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:

{
  "success": false,
  "messages": ["No applicable steps found for this user level"],
  "error": "NO_APPLICABLE_STEPS"
}

Performance Testing

1. Load Testing dengan Multiple Submissions

# 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

# 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

curl -X GET "http://localhost:8080/api/approval-workflows/1/with-steps" \
  -H "Authorization: Bearer YOUR_TOKEN" | jq '.'

2. Check User Level

curl -X GET "http://localhost:8080/api/users/123" \
  -H "Authorization: Bearer YOUR_TOKEN" | jq '.data.user_levels'

3. Check Approval Flow Status

curl -X GET "http://localhost:8080/api/article-approval-flows/456" \
  -H "Authorization: Bearer YOUR_TOKEN" | jq '.'

4. Check Next Steps Preview

curl -X GET "http://localhost:8080/api/article-approval-flows/456/next-steps-preview" \
  -H "Authorization: Bearer YOUR_TOKEN" | jq '.'

Environment Variables

# 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

# 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

# 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

curl -X GET "$API_BASE_URL/health" \
  -H "Authorization: Bearer $ADMIN_TOKEN"

2. Get System Statistics

curl -X GET "$API_BASE_URL/api/article-approval-flows/dashboard-stats" \
  -H "Authorization: Bearer $ADMIN_TOKEN" | jq '.'

3. Check Workflow Performance

curl -X GET "$API_BASE_URL/api/approval-workflows" \
  -H "Authorization: Bearer $ADMIN_TOKEN" | jq '.data | length'