16 KiB
API Documentation - Sistem Approval Artikel Dinamis
Overview
Dokumentasi ini menjelaskan API endpoints yang tersedia untuk sistem approval artikel dinamis. Sistem ini memungkinkan pembuatan workflow approval yang fleksibel dengan multiple level dan proses revisi.
Base URL
http://localhost:8800/api
Authentication
Semua endpoint memerlukan Bearer token authentication:
Authorization: Bearer <your_jwt_token>
1. Approval Workflows Management
1.1 Get All Workflows
GET /approval-workflows
Query Parameters:
page(optional): Page number (default: 1)limit(optional): Items per page (default: 10)search(optional): Search by workflow nameis_active(optional): Filter by active status (true/false)
Response:
{
"success": true,
"messages": ["Workflows retrieved successfully"],
"data": [
{
"id": 1,
"name": "Standard 3-Level Approval",
"description": "Default workflow with 3 approval levels",
"is_active": true,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"steps": [
{
"id": 1,
"step_order": 1,
"user_level_id": 3,
"user_level": {
"id": 3,
"level_name": "Approver Level 3",
"level_number": 3
},
"is_required": true,
"can_skip": false
}
]
}
],
"pagination": {
"current_page": 1,
"per_page": 10,
"total": 5,
"total_pages": 1
}
}
1.2 Get Workflow by ID
GET /approval-workflows/{id}
Response:
{
"success": true,
"messages": ["Workflow retrieved successfully"],
"data": {
"id": 1,
"name": "Standard 3-Level Approval",
"description": "Default workflow with 3 approval levels",
"is_active": true,
"steps": [
{
"id": 1,
"step_order": 1,
"user_level_id": 3,
"is_required": true,
"can_skip": false
}
]
}
}
1.3 Create New Workflow
POST /approval-workflows
Request Body:
{
"name": "Custom 2-Level Approval",
"description": "Fast track approval for urgent articles",
"steps": [
{
"stepOrder": 1,
"userLevelId": 2,
"isRequired": true,
"canSkip": false
},
{
"stepOrder": 2,
"userLevelId": 1,
"isRequired": true,
"canSkip": false
}
]
}
Validation Rules:
name: Required, max 255 characterssteps: Required, minimum 1 stepstepOrder: Must be sequential starting from 1userLevelId: Must exist in user_levels table
Response:
{
"success": true,
"messages": ["Workflow created successfully"],
"data": {
"id": 5,
"name": "Custom 2-Level Approval",
"description": "Fast track approval for urgent articles",
"is_active": true,
"created_at": "2024-01-15T14:30:00Z"
}
}
1.4 Update Workflow
PUT /approval-workflows/{id}
Request Body:
{
"name": "Updated Workflow Name",
"description": "Updated description",
"is_active": true
}
1.5 Delete Workflow
DELETE /approval-workflows/{id}
Note: Workflow can only be deleted if no articles are currently using it.
2. Article Approval Management
2.1 Submit Article for Approval
POST /articles/{id}/submit-approval
Request Body:
{
"workflowId": 2
}
Response:
{
"success": true,
"messages": ["Article submitted for approval successfully"],
"data": {
"id": 15,
"article_id": 123,
"workflow_id": 2,
"current_step": 1,
"status_id": 1,
"created_at": "2024-01-15T15:00:00Z"
}
}
2.2 Approve Current Step
POST /articles/{id}/approve
Request Body:
{
"message": "Article content is excellent, approved for next level"
}
Response:
{
"success": true,
"messages": ["Article approved successfully"],
"data": {
"next_step": 2,
"status": "moved_to_next_level"
}
}
2.3 Reject Article
POST /articles/{id}/reject
Request Body:
{
"message": "Article does not meet quality standards"
}
Response:
{
"success": true,
"messages": ["Article rejected successfully"]
}
2.4 Request Revision
POST /articles/{id}/request-revision
Request Body:
{
"message": "Please fix grammar issues in paragraph 3 and add more references"
}
Response:
{
"success": true,
"messages": ["Revision requested successfully"]
}
2.5 Resubmit After Revision
POST /articles/{id}/resubmit
Request Body:
{
"message": "Fixed all requested issues"
}
Response:
{
"success": true,
"messages": ["Article resubmitted successfully"],
"data": {
"current_step": 1,
"status": "back_in_approval_flow"
}
}
3. Approval Dashboard
3.1 Get Pending Approvals for Current User
GET /approvals/pending
Query Parameters:
page(optional): Page number (default: 1)limit(optional): Items per page (default: 10, max: 50)priority(optional): Filter by priority (high, medium, low)category_id(optional): Filter by article categorysearch(optional): Search in article title or author namedate_from(optional): Filter articles submitted from date (YYYY-MM-DD)date_to(optional): Filter articles submitted to date (YYYY-MM-DD)sort_by(optional): Sort by field (waiting_time, created_at, title, priority)sort_order(optional): Sort order (asc, desc) - default: descworkflow_id(optional): Filter by specific workflow
Response:
{
"success": true,
"messages": ["Pending approvals retrieved successfully"],
"data": [
{
"id": 15,
"article": {
"id": 123,
"title": "Understanding Machine Learning",
"excerpt": "This article explores the fundamentals of machine learning...",
"author": {
"id": 45,
"name": "John Doe",
"email": "john@example.com",
"profile_picture": "https://example.com/avatar.jpg"
},
"category": {
"id": 5,
"name": "Technology",
"color": "#3B82F6"
},
"word_count": 1250,
"estimated_read_time": "5 min",
"created_at": "2024-01-15T10:00:00Z",
"submitted_at": "2024-01-15T14:30:00Z"
},
"workflow": {
"id": 2,
"name": "Standard 3-Level Approval",
"total_steps": 3
},
"current_step": 2,
"my_step_order": 2,
"waiting_since": "2024-01-15T14:30:00Z",
"waiting_duration_hours": 6.5,
"priority": "medium",
"previous_approvals": [
{
"step_order": 1,
"approver_name": "Jane Smith",
"approved_at": "2024-01-15T14:30:00Z",
"message": "Content looks good"
}
],
"urgency_score": 7.5,
"can_approve": true,
"can_reject": true,
"can_request_revision": true
}
],
"pagination": {
"current_page": 1,
"per_page": 10,
"total": 5,
"total_pages": 1
},
"summary": {
"total_pending": 5,
"high_priority": 2,
"medium_priority": 2,
"low_priority": 1,
"overdue_count": 1,
"avg_waiting_hours": 8.2
}
}
3.2 Get Approval History for Article
GET /articles/{id}/approval-history
Response:
{
"success": true,
"messages": ["Approval history retrieved successfully"],
"data": {
"article_id": 123,
"workflow": {
"id": 2,
"name": "Standard 3-Level Approval"
},
"current_step": 2,
"status": "in_progress",
"history": [
{
"id": 1,
"step_order": 1,
"action": "approved",
"message": "Good content, approved",
"approver": {
"id": 67,
"name": "Jane Smith",
"level": "Approver Level 3"
},
"approved_at": "2024-01-15T14:30:00Z"
}
]
}
}
3.3 Get My Approval Statistics
GET /approvals/my-stats
Response:
{
"success": true,
"messages": ["Statistics retrieved successfully"],
"data": {
"pending_count": 5,
"overdue_count": 1,
"approved_today": 3,
"approved_this_week": 15,
"approved_this_month": 45,
"rejected_this_month": 2,
"revision_requests_this_month": 8,
"average_approval_time_hours": 4.5,
"fastest_approval_minutes": 15,
"slowest_approval_hours": 48,
"approval_rate_percentage": 85.2,
"categories_breakdown": [
{
"category_name": "Technology",
"pending": 2,
"approved_this_month": 12
},
{
"category_name": "Health",
"pending": 3,
"approved_this_month": 8
}
]
}
}
3.4 Get Articles Requiring My Approval (Detailed View)
GET /approvals/my-queue
Query Parameters:
- Same as
/approvals/pendingbut specifically filtered for current user's level include_preview(optional): Include article content preview (true/false)urgency_only(optional): Show only urgent articles (true/false)
Response:
{
"success": true,
"messages": ["My approval queue retrieved successfully"],
"data": [
{
"id": 15,
"article": {
"id": 123,
"title": "Understanding Machine Learning",
"content_preview": "Machine learning is a subset of artificial intelligence that enables computers to learn and improve from experience without being explicitly programmed...",
"full_content_available": true,
"author": {
"id": 45,
"name": "John Doe",
"reputation_score": 8.5,
"articles_published": 25,
"approval_success_rate": 92.3
},
"submission_notes": "This is an updated version based on previous feedback",
"tags": ["AI", "Technology", "Education"],
"seo_score": 85,
"readability_score": "Good"
},
"approval_context": {
"my_role_in_workflow": "Senior Editor Review",
"step_description": "Review content quality and technical accuracy",
"expected_action": "Approve or request technical revisions",
"deadline": "2024-01-16T18:00:00Z",
"is_overdue": false,
"escalation_available": true
},
"workflow_progress": {
"completed_steps": 1,
"total_steps": 3,
"progress_percentage": 33.3,
"next_approver": "Chief Editor"
}
}
]
}
3.5 Get Approval Workload Distribution
GET /approvals/workload
Response:
{
"success": true,
"messages": ["Workload distribution retrieved successfully"],
"data": {
"my_level": {
"level_name": "Senior Editor",
"level_number": 2,
"pending_articles": 5,
"avg_daily_approvals": 8.5
},
"team_comparison": [
{
"approver_name": "Jane Smith",
"level_name": "Senior Editor",
"pending_articles": 3,
"avg_response_time_hours": 2.5
},
{
"approver_name": "Mike Johnson",
"level_name": "Senior Editor",
"pending_articles": 7,
"avg_response_time_hours": 4.2
}
],
"bottlenecks": [
{
"level_name": "Chief Editor",
"pending_count": 12,
"avg_waiting_time_hours": 18.5,
"is_bottleneck": true
}
]
}
}
3.6 Bulk Approval Actions
POST /approvals/bulk-action
Request Body:
{
"article_ids": [123, 124, 125],
"action": "approve",
"message": "Bulk approval for similar content type",
"apply_to_similar": false
}
Response:
{
"success": true,
"messages": ["Bulk action completed successfully"],
"data": {
"processed_count": 3,
"successful_count": 3,
"failed_count": 0,
"results": [
{
"article_id": 123,
"status": "success",
"next_step": 3
},
{
"article_id": 124,
"status": "success",
"next_step": 3
},
{
"article_id": 125,
"status": "success",
"next_step": "published"
}
]
}
}
4. User Level Management
4.1 Get Available User Levels
GET /user-levels
Response:
{
"success": true,
"messages": ["User levels retrieved successfully"],
"data": [
{
"id": 1,
"level_name": "Chief Editor",
"level_number": 1,
"parent_level_id": null,
"is_approval_active": true
},
{
"id": 2,
"level_name": "Senior Editor",
"level_number": 2,
"parent_level_id": 1,
"is_approval_active": true
},
{
"id": 3,
"level_name": "Junior Editor",
"level_number": 3,
"parent_level_id": 2,
"is_approval_active": true
}
]
}
5. Error Responses
5.1 Validation Error (400)
{
"success": false,
"messages": ["Validation failed"],
"errors": {
"name": ["Name is required"],
"steps": ["At least one step is required"]
}
}
5.2 Unauthorized (401)
{
"success": false,
"messages": ["Unauthorized access"]
}
5.3 Forbidden (403)
{
"success": false,
"messages": ["You don't have permission to approve this article"]
}
5.4 Not Found (404)
{
"success": false,
"messages": ["Article not found"]
}
5.5 Business Logic Error (422)
{
"success": false,
"messages": ["Article already has active approval flow"]
}
5.6 Internal Server Error (500)
{
"success": false,
"messages": ["Internal server error occurred"]
}
6. Webhook Events (Optional)
Sistem dapat mengirim webhook notifications untuk event-event penting:
6.1 Article Submitted for Approval
{
"event": "article.submitted_for_approval",
"timestamp": "2024-01-15T15:00:00Z",
"data": {
"article_id": 123,
"workflow_id": 2,
"submitted_by": {
"id": 45,
"name": "John Doe"
},
"next_approver_level": 3
}
}
6.2 Article Approved
{
"event": "article.approved",
"timestamp": "2024-01-15T16:00:00Z",
"data": {
"article_id": 123,
"approved_by": {
"id": 67,
"name": "Jane Smith",
"level": 3
},
"current_step": 2,
"is_final_approval": false
}
}
6.3 Article Published
{
"event": "article.published",
"timestamp": "2024-01-15T17:00:00Z",
"data": {
"article_id": 123,
"final_approver": {
"id": 89,
"name": "Chief Editor",
"level": 1
},
"total_approval_time_hours": 6.5
}
}
6.4 Revision Requested
{
"event": "article.revision_requested",
"timestamp": "2024-01-15T16:30:00Z",
"data": {
"article_id": 123,
"requested_by": {
"id": 67,
"name": "Jane Smith",
"level": 2
},
"message": "Please fix grammar issues",
"author": {
"id": 45,
"name": "John Doe"
}
}
}
7. Rate Limiting
API menggunakan rate limiting untuk mencegah abuse:
- General endpoints: 100 requests per minute per user
- Approval actions: 50 requests per minute per user
- Workflow management: 20 requests per minute per user
8. Pagination
Semua endpoint yang mengembalikan list menggunakan pagination:
- Default
limit: 10 - Maximum
limit: 100 - Default
page: 1
9. Filtering dan Sorting
Beberapa endpoint mendukung filtering dan sorting:
Query Parameters untuk Filtering:
status: Filter by statususer_level: Filter by user leveldate_from: Filter from date (YYYY-MM-DD)date_to: Filter to date (YYYY-MM-DD)search: Search in title/content
Query Parameters untuk Sorting:
sort_by: Field to sort by (created_at, updated_at, title, etc.)sort_order: asc atau desc (default: desc)
Contoh:
GET /articles?status=pending&sort_by=created_at&sort_order=asc&page=1&limit=20
10. Bulk Operations
10.1 Bulk Approve Articles
POST /articles/bulk-approve
Request Body:
{
"article_ids": [123, 124, 125],
"message": "Bulk approval for similar articles"
}
10.2 Bulk Assign Workflow
POST /articles/bulk-assign-workflow
Request Body:
{
"article_ids": [123, 124, 125],
"workflow_id": 2
}
Dokumentasi API ini memberikan panduan lengkap untuk mengintegrasikan sistem approval artikel dinamis dengan frontend atau sistem eksternal lainnya.