457 lines
13 KiB
Markdown
457 lines
13 KiB
Markdown
# Comprehensive Workflow Detail API
|
|
|
|
## Overview
|
|
API endpoint untuk mendapatkan detail lengkap dari Approval Workflow beserta semua data terkait termasuk steps, client settings, dan informasi pendukung lainnya.
|
|
|
|
## Endpoint
|
|
```
|
|
POST /approval-workflows/comprehensive-details
|
|
```
|
|
|
|
## Request
|
|
|
|
### Headers
|
|
```
|
|
Authorization: Bearer <access_token>
|
|
Content-Type: application/json
|
|
```
|
|
|
|
### Request Body
|
|
```json
|
|
{
|
|
"workflowId": 1
|
|
}
|
|
```
|
|
|
|
### Request Structure
|
|
```go
|
|
type ComprehensiveWorkflowDetailRequest struct {
|
|
WorkflowId uint `json:"workflowId" validate:"required"`
|
|
}
|
|
```
|
|
|
|
## Response
|
|
|
|
### Success Response (200)
|
|
```json
|
|
{
|
|
"success": true,
|
|
"messages": ["Comprehensive workflow details retrieved successfully"],
|
|
"data": {
|
|
"workflow": {
|
|
"id": 1,
|
|
"name": "Standard Article Approval",
|
|
"description": "Standard approval workflow for articles",
|
|
"isDefault": true,
|
|
"isActive": true,
|
|
"requiresApproval": true,
|
|
"autoPublish": false,
|
|
"clientId": "123e4567-e89b-12d3-a456-426614174000",
|
|
"createdAt": "2024-01-01T00:00:00Z",
|
|
"updatedAt": "2024-01-01T00:00:00Z",
|
|
"totalSteps": 3,
|
|
"activeSteps": 3,
|
|
"hasBranches": false,
|
|
"maxStepOrder": 3
|
|
},
|
|
"steps": [
|
|
{
|
|
"id": 1,
|
|
"workflowId": 1,
|
|
"stepOrder": 1,
|
|
"stepName": "Content Review",
|
|
"requiredUserLevelId": 2,
|
|
"requiredUserLevelName": "Editor",
|
|
"canSkip": false,
|
|
"autoApproveAfterHours": null,
|
|
"isActive": true,
|
|
"parentStepId": null,
|
|
"parentStepName": null,
|
|
"conditionType": null,
|
|
"conditionValue": null,
|
|
"isParallel": false,
|
|
"branchName": null,
|
|
"branchOrder": null,
|
|
"hasChildren": false,
|
|
"isFirstStep": true,
|
|
"isLastStep": false
|
|
},
|
|
{
|
|
"id": 2,
|
|
"workflowId": 1,
|
|
"stepOrder": 2,
|
|
"stepName": "Final Approval",
|
|
"requiredUserLevelId": 3,
|
|
"requiredUserLevelName": "Manager",
|
|
"canSkip": false,
|
|
"autoApproveAfterHours": null,
|
|
"isActive": true,
|
|
"parentStepId": null,
|
|
"parentStepName": null,
|
|
"conditionType": null,
|
|
"conditionValue": null,
|
|
"isParallel": false,
|
|
"branchName": null,
|
|
"branchOrder": null,
|
|
"hasChildren": false,
|
|
"isFirstStep": false,
|
|
"isLastStep": true
|
|
}
|
|
],
|
|
"clientSettings": {
|
|
"id": 1,
|
|
"clientId": "123e4567-e89b-12d3-a456-426614174000",
|
|
"requiresApproval": true,
|
|
"defaultWorkflowId": 1,
|
|
"defaultWorkflowName": "Standard Article Approval",
|
|
"autoPublishArticles": false,
|
|
"approvalExemptUsers": [1, 2],
|
|
"approvalExemptRoles": [1],
|
|
"approvalExemptCategories": [1, 2],
|
|
"requireApprovalFor": ["articles", "news"],
|
|
"skipApprovalFor": ["announcements"],
|
|
"isActive": true,
|
|
"createdAt": "2024-01-01T00:00:00Z",
|
|
"updatedAt": "2024-01-01T00:00:00Z",
|
|
"exemptUsersDetails": [
|
|
{
|
|
"id": 1,
|
|
"username": "admin",
|
|
"fullname": "Administrator",
|
|
"email": "admin@example.com",
|
|
"userLevelId": 1,
|
|
"userLevelName": "Super Admin",
|
|
"isActive": true
|
|
}
|
|
],
|
|
"exemptRolesDetails": [
|
|
{
|
|
"id": 1,
|
|
"roleName": "Super Admin",
|
|
"isActive": true
|
|
}
|
|
],
|
|
"exemptCategoriesDetails": [
|
|
{
|
|
"id": 1,
|
|
"categoryName": "Announcements",
|
|
"isActive": true
|
|
}
|
|
]
|
|
},
|
|
"relatedData": {
|
|
"userLevels": [
|
|
{
|
|
"id": 1,
|
|
"name": "Super Admin",
|
|
"aliasName": "super_admin",
|
|
"levelNumber": 1,
|
|
"isApprovalActive": true,
|
|
"isActive": true
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Editor",
|
|
"aliasName": "editor",
|
|
"levelNumber": 2,
|
|
"isApprovalActive": true,
|
|
"isActive": true
|
|
}
|
|
]
|
|
},
|
|
"statistics": {
|
|
"totalArticlesProcessed": 0,
|
|
"pendingArticles": 0,
|
|
"approvedArticles": 0,
|
|
"rejectedArticles": 0,
|
|
"averageProcessingTime": 0,
|
|
"mostActiveStep": "",
|
|
"lastUsedAt": null
|
|
},
|
|
"lastUpdated": "2024-01-01T00:00:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Response Structure
|
|
|
|
### ComprehensiveWorkflowDetailResponse
|
|
```go
|
|
type ComprehensiveWorkflowDetailResponse struct {
|
|
Workflow WorkflowDetailInfo `json:"workflow"`
|
|
Steps []WorkflowStepDetailInfo `json:"steps"`
|
|
ClientSettings ClientApprovalSettingsDetail `json:"clientSettings"`
|
|
RelatedData RelatedDataInfo `json:"relatedData"`
|
|
Statistics WorkflowStatisticsInfo `json:"statistics"`
|
|
LastUpdated time.Time `json:"lastUpdated"`
|
|
}
|
|
```
|
|
|
|
### WorkflowDetailInfo
|
|
```go
|
|
type WorkflowDetailInfo struct {
|
|
ID uint `json:"id"`
|
|
Name string `json:"name"`
|
|
Description *string `json:"description"`
|
|
IsDefault *bool `json:"isDefault"`
|
|
IsActive *bool `json:"isActive"`
|
|
RequiresApproval *bool `json:"requiresApproval"`
|
|
AutoPublish *bool `json:"autoPublish"`
|
|
ClientId *string `json:"clientId"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
|
|
// Additional workflow info
|
|
TotalSteps int `json:"totalSteps"`
|
|
ActiveSteps int `json:"activeSteps"`
|
|
HasBranches bool `json:"hasBranches"`
|
|
MaxStepOrder int `json:"maxStepOrder"`
|
|
}
|
|
```
|
|
|
|
### WorkflowStepDetailInfo
|
|
```go
|
|
type WorkflowStepDetailInfo struct {
|
|
ID uint `json:"id"`
|
|
WorkflowId uint `json:"workflowId"`
|
|
StepOrder int `json:"stepOrder"`
|
|
StepName string `json:"stepName"`
|
|
RequiredUserLevelId uint `json:"requiredUserLevelId"`
|
|
RequiredUserLevelName string `json:"requiredUserLevelName"`
|
|
CanSkip *bool `json:"canSkip"`
|
|
AutoApproveAfterHours *int `json:"autoApproveAfterHours"`
|
|
IsActive *bool `json:"isActive"`
|
|
|
|
// Multi-branch support fields
|
|
ParentStepId *uint `json:"parentStepId"`
|
|
ParentStepName *string `json:"parentStepName"`
|
|
ConditionType *string `json:"conditionType"`
|
|
ConditionValue *string `json:"conditionValue"`
|
|
IsParallel *bool `json:"isParallel"`
|
|
BranchName *string `json:"branchName"`
|
|
BranchOrder *int `json:"branchOrder"`
|
|
|
|
// Additional step info
|
|
HasChildren bool `json:"hasChildren"`
|
|
IsFirstStep bool `json:"isFirstStep"`
|
|
IsLastStep bool `json:"isLastStep"`
|
|
}
|
|
```
|
|
|
|
### ClientApprovalSettingsDetail
|
|
```go
|
|
type ClientApprovalSettingsDetail struct {
|
|
ID uint `json:"id"`
|
|
ClientId string `json:"clientId"`
|
|
RequiresApproval *bool `json:"requiresApproval"`
|
|
DefaultWorkflowId *uint `json:"defaultWorkflowId"`
|
|
DefaultWorkflowName *string `json:"defaultWorkflowName"`
|
|
AutoPublishArticles *bool `json:"autoPublishArticles"`
|
|
ApprovalExemptUsers []uint `json:"approvalExemptUsers"`
|
|
ApprovalExemptRoles []uint `json:"approvalExemptRoles"`
|
|
ApprovalExemptCategories []uint `json:"approvalExemptCategories"`
|
|
RequireApprovalFor []string `json:"requireApprovalFor"`
|
|
SkipApprovalFor []string `json:"skipApprovalFor"`
|
|
IsActive *bool `json:"isActive"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
|
|
// Detailed exempt information
|
|
ExemptUsersDetails []UserDetailInfo `json:"exemptUsersDetails"`
|
|
ExemptRolesDetails []UserRoleDetailInfo `json:"exemptRolesDetails"`
|
|
ExemptCategoriesDetails []CategoryDetailInfo `json:"exemptCategoriesDetails"`
|
|
}
|
|
```
|
|
|
|
### RelatedDataInfo
|
|
```go
|
|
type RelatedDataInfo struct {
|
|
UserLevels []UserLevelDetailInfo `json:"userLevels"`
|
|
}
|
|
```
|
|
|
|
### WorkflowStatisticsInfo
|
|
```go
|
|
type WorkflowStatisticsInfo struct {
|
|
TotalArticlesProcessed int `json:"totalArticlesProcessed"`
|
|
PendingArticles int `json:"pendingArticles"`
|
|
ApprovedArticles int `json:"approvedArticles"`
|
|
RejectedArticles int `json:"rejectedArticles"`
|
|
AverageProcessingTime int `json:"averageProcessingTime"`
|
|
MostActiveStep string `json:"mostActiveStep"`
|
|
LastUsedAt *string `json:"lastUsedAt"`
|
|
}
|
|
```
|
|
|
|
## Error Responses
|
|
|
|
### 400 Bad Request
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Validation failed: workflowId is required"],
|
|
"data": null
|
|
}
|
|
```
|
|
|
|
### 401 Unauthorized
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Unauthorized access"],
|
|
"data": null
|
|
}
|
|
```
|
|
|
|
### 404 Not Found
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Workflow not found"],
|
|
"data": null
|
|
}
|
|
```
|
|
|
|
### 500 Internal Server Error
|
|
```json
|
|
{
|
|
"success": false,
|
|
"messages": ["Internal server error"],
|
|
"data": null
|
|
}
|
|
```
|
|
|
|
## Features
|
|
|
|
### 1. Comprehensive Workflow Information
|
|
- Detail lengkap workflow termasuk metadata dan statistik
|
|
- Informasi step dengan hierarki dan kondisi
|
|
- Status aktif/inaktif dan konfigurasi approval
|
|
|
|
### 2. Detailed Step Information
|
|
- Informasi lengkap setiap step dalam workflow
|
|
- Nama user level yang diperlukan untuk approval
|
|
- Konfigurasi skip, auto-approve, dan kondisi
|
|
- Dukungan multi-branch workflow
|
|
|
|
### 3. Client Settings Integration
|
|
- Pengaturan approval global untuk client
|
|
- Daftar user, role, dan kategori yang dikecualikan
|
|
- Informasi detail untuk setiap exemption
|
|
- Workflow default yang digunakan
|
|
|
|
### 4. Related Data Support
|
|
- Daftar user level yang tersedia
|
|
- Data pendukung untuk konfigurasi workflow
|
|
- Informasi terkait untuk referensi
|
|
|
|
### 5. Statistics Information
|
|
- Statistik penggunaan workflow (placeholder untuk implementasi future)
|
|
- Informasi performa dan aktivitas
|
|
- Data untuk monitoring dan analisis
|
|
|
|
## Use Cases
|
|
|
|
### 1. Workflow Management Dashboard
|
|
- Menampilkan detail lengkap workflow untuk administrator
|
|
- Monitoring status dan konfigurasi workflow
|
|
- Analisis performa dan penggunaan
|
|
|
|
### 2. Workflow Configuration
|
|
- Mengedit workflow dengan informasi lengkap
|
|
- Mengatur step dan kondisi approval
|
|
- Konfigurasi exemption dan pengaturan client
|
|
|
|
### 3. Approval Process Monitoring
|
|
- Melihat status artikel dalam proses approval
|
|
- Tracking progress melalui step workflow
|
|
- Monitoring bottleneck dan performa
|
|
|
|
### 4. Client Settings Management
|
|
- Mengatur pengaturan approval global
|
|
- Mengelola exemption untuk user dan kategori
|
|
- Konfigurasi workflow default
|
|
|
|
## Implementation Notes
|
|
|
|
### 1. Performance Considerations
|
|
- API menggunakan single query dengan join untuk efisiensi
|
|
- Data related diambil secara terpisah untuk fleksibilitas
|
|
- Caching dapat diimplementasikan untuk data yang jarang berubah
|
|
|
|
### 2. Security
|
|
- Menggunakan authentication token untuk akses
|
|
- Validasi clientId dari token untuk multi-tenant
|
|
- Authorization check untuk akses workflow
|
|
|
|
### 3. Error Handling
|
|
- Graceful handling untuk data yang tidak ditemukan
|
|
- Logging untuk debugging dan monitoring
|
|
- Rollback mechanism untuk operasi yang gagal
|
|
|
|
### 4. Extensibility
|
|
- Struktur response dapat diperluas untuk kebutuhan future
|
|
- Statistics dapat diimplementasikan dengan query yang lebih kompleks
|
|
- Support untuk workflow yang lebih kompleks
|
|
|
|
## Dependencies
|
|
|
|
### Required Repositories
|
|
- `ApprovalWorkflowsRepository`
|
|
- `ApprovalWorkflowStepsRepository`
|
|
- `ClientApprovalSettingsRepository`
|
|
- `UsersRepository`
|
|
- `UserLevelsRepository`
|
|
- `UserRolesRepository`
|
|
- `ArticleCategoriesRepository`
|
|
- `ArticleApprovalFlowsRepository`
|
|
|
|
### Required Services
|
|
- `ApprovalWorkflowsService`
|
|
- `ClientApprovalSettingsService`
|
|
|
|
## Testing
|
|
|
|
### Unit Tests
|
|
```go
|
|
func TestGetComprehensiveWorkflowDetails(t *testing.T) {
|
|
// Test cases for comprehensive workflow details
|
|
// Test with valid workflow ID
|
|
// Test with invalid workflow ID
|
|
// Test with missing client settings
|
|
// Test with empty steps
|
|
}
|
|
```
|
|
|
|
### Integration Tests
|
|
```go
|
|
func TestComprehensiveWorkflowDetailsAPI(t *testing.T) {
|
|
// Test API endpoint
|
|
// Test authentication
|
|
// Test response structure
|
|
// Test error handling
|
|
}
|
|
```
|
|
|
|
## Future Enhancements
|
|
|
|
### 1. Real-time Statistics
|
|
- Implementasi query untuk statistik real-time
|
|
- Monitoring performa workflow
|
|
- Analytics dan reporting
|
|
|
|
### 2. Workflow Templates
|
|
- Template workflow yang dapat digunakan kembali
|
|
- Import/export workflow configuration
|
|
- Workflow marketplace
|
|
|
|
### 3. Advanced Branching
|
|
- Conditional workflow berdasarkan konten
|
|
- Dynamic step generation
|
|
- AI-powered workflow optimization
|
|
|
|
### 4. Integration Features
|
|
- Webhook untuk notifikasi
|
|
- API untuk external system integration
|
|
- Workflow automation triggers
|