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